获取内存错误:在matplotlib

时间:2017-03-21 09:14:08

标签: python matplotlib

我的X轴范围是0到4294967296(即2 ^ 32),即我想在matplotlib中在X轴上绘制最多4294967296。但我收到“内存错误”的错误。

如何避免内存错误?

File "/usr/lib64/python2.7/site-packages/matplotlib/pyplot.py", line 3161, in plot
    ret = ax.plot(*args, **kwargs)
  File "/usr/lib64/python2.7/site-packages/matplotlib/__init__.py", line 1819, in inner
    return func(ax, *args, **kwargs)
  File "/usr/lib64/python2.7/site-packages/matplotlib/axes/_axes.py", line 1383, in plot
    self.add_line(line)
  File "/usr/lib64/python2.7/site-packages/matplotlib/axes/_base.py", line 1703, in add_line
    self._update_line_limits(line)
  File "/usr/lib64/python2.7/site-packages/matplotlib/axes/_base.py", line 1725, in _update_line_limits
    path = line.get_path()
  File "/usr/lib64/python2.7/site-packages/matplotlib/lines.py", line 938, in get_path
    self.recache()
  File "/usr/lib64/python2.7/site-packages/matplotlib/lines.py", line 647, in recache
    self._xy = np.empty((len(x), 2), dtype=np.float_)
MemoryError

plt.xlim(0,4294967295)
plt.ylim(0,1)
plt.xlabel("Sequence number")
plt.ylabel("Cumulative_distribution")
plt.plot(x,y,linewidth=3,color="blue")
plt.savefig('seqnum_plot.eps', format='eps')
plt.show() 

1 个答案:

答案 0 :(得分:0)

看起来你正试图绘制大量的样本点。这有很多问题。

首先,您的屏幕有多少像素?您可以在绘制的图表上看到多少数据?远不及2 ^ 32值。

另一个问题是记忆问题。 Matplotlib的目的不是为了处理可能不适合您正在运行它的机器的物理内存的绘图数据集。那么,解决方案是什么?

下采样。<​​/ P>

如何实现这将取决于您的数据代表什么类型的功能。是单调递减还是增加?数据波动的速度有多快?有关准确表示人类解释的时间序列数据的问题,请快速阅读this硕士论文(“视觉表示的下采样时间序列”由Sveinn Steinarsson撰写)。 / p>

如果您的y数据代表累积分布(假设它会缓慢波动并且单调增加),您可以简单地对每个 n 元素进行采样:

path/to/soffice --headless --convert-to docx:"Microsoft Word 2007/2010/2013 XML" your_source_file.pdf

请注意,step_size = 2**20 x = x_old[::step_size] y = y_old[::step_size] y_old需要为Numpy数组才能实现此切片。