<p>除了@Lennart认为不需要完整的分辨率之外,您还可以考虑一个类似于下面的图。在</p>
<p>如果使用原始数组的二维视图和<code>axis</code>关键字arg到<code>x.min()</code>,<code>x.max()</code>等,计算“分块”版本的最大/平均/最小值非常简单和高效</p>
<p>即使使用了过滤,绘制它也比绘制整个数组快得多。在</p>
<p>(注:要想画出这么多点,你得把噪音调小一点。否则你会得到你提到的<code>OverflowError</code>。如果要比较绘制“完整”数据集,请将<code>y += 0.3 * y.max() np.random...</code>行改为更像<code>0.1</code>或完全删除它。)</p>
<pre><code>import matplotlib.pyplot as plt
import numpy as np
np.random.seed(1977)
# Generate some very noisy but interesting data...
num = 1e7
x = np.linspace(0, 10, num)
y = np.random.random(num) - 0.5
y.cumsum(out=y)
y += 0.3 * y.max() * np.random.random(num)
fig, ax = plt.subplots()
# Wrap the array into a 2D array of chunks, truncating the last chunk if
# chunksize isn't an even divisor of the total size.
# (This part won't use _any_ additional memory)
chunksize = 10000
numchunks = y.size // chunksize
ychunks = y[:chunksize*numchunks].reshape((-1, chunksize))
xchunks = x[:chunksize*numchunks].reshape((-1, chunksize))
# Calculate the max, min, and means of chunksize-element chunks...
max_env = ychunks.max(axis=1)
min_env = ychunks.min(axis=1)
ycenters = ychunks.mean(axis=1)
xcenters = xchunks.mean(axis=1)
# Now plot the bounds and the mean...
ax.fill_between(xcenters, min_env, max_env, color='gray',
edgecolor='none', alpha=0.5)
ax.plot(xcenters, ycenters)
fig.savefig('temp.png', dpi=600)
</code></pre>
<p><img src="https://i.stack.imgur.com/EZOKM.png" alt="enter image description here"/></p>