<p>下面是一个绘制多条曲线的想法,这些曲线的透明度彼此重叠:</p>
<pre class="lang-py prettyprint-override"><code>import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 200)
for _ in range(1000):
plt.plot(x, np.sin(x * np.random.normal(1, 0.1)) * np.random.normal(1, 0.1), color='r', alpha=0.02)
plt.plot(x, np.sin(x), color='b')
plt.margins(x=0)
plt.show()
</code></pre>
<p><a href="https://i.stack.imgur.com/LaBuN.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/LaBuN.png" alt="multiple curves with transparency"/></a></p>
<p>另一个选项创建二维直方图:</p>
<pre class="lang-py prettyprint-override"><code>import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 200)
all_curves = np.array([np.sin(x * np.random.normal(1, 0.1)) * np.random.normal(1, 0.1) for _ in range(100)])
plt.hist2d(x=np.tile(x, all_curves.shape[0]), y=all_curves.ravel(), bins=(100, 100), cmap='inferno')
plt.show()
</code></pre>
<p><a href="https://i.stack.imgur.com/mraZa.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/mraZa.png" alt="2d histogram"/></a></p>
<p>还有一种方法是在置信区间之间使用<code>fill_between</code>(如@bramb所建议的):</p>
<pre class="lang-py prettyprint-override"><code>import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 200)
all_curves = np.array([np.sin(x * np.random.normal(1, 0.1)) * np.random.normal(1, 0.1) for _ in range(1000)])
confidence_interval1 = 95
confidence_interval2 = 80
confidence_interval3 = 50
for ci in [confidence_interval1, confidence_interval2, confidence_interval3]:
low = np.percentile(all_curves, 50 - ci / 2, axis=0)
high = np.percentile(all_curves, 50 + ci / 2, axis=0)
plt.fill_between(x, low, high, color='r', alpha=0.2)
plt.plot(x, np.sin(x), color='b')
plt.margins(x=0)
plt.show()
</code></pre>
<p><a href="https://i.stack.imgur.com/H7d0L.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/H7d0L.png" alt="fill_between with confidence intervals"/></a></p>