在matplotlib中绘制太多行:内存不足

时间:2017-08-24 07:45:50

标签: python matplotlib

我需要在一个图中绘制~2000x300行。 例如类似的东西,但300曲线(每个2000数据点)而不是这里显示的四个: example plot

首先我设置了这个数字:

fig, ax = plt.subplots(figsize=(8, 8))

然后我多次执行以下操作:

drawnLine = plt.Line2D([Xstart, Xfinish], [Ystart,Yfinish], 1, linestyle='solid', color='b')
ax.add_artist(drawnLine)

最后我想做:

fig.savefig(ExpFolder + 'NewFig.png')

然而,脚本达到8GB内存限制并停止。

2 个答案:

答案 0 :(得分:0)

是的,matplotlib不是世界上效率最高的库。

现在,如果你在纯粹的纯粹天真的软件绘图中做到这一点,那么真正 的600,000个细分市场,嗯,不是很酷。

我建议您放弃matplotlib的canvas方法:

  • 考虑固定图像大小(以像素为单位),并直接将线条渲染到该画布上。您可以使用matplotlib imagesc和{consseorts'显示的图像使用一些技巧来实现这一点,但实际上,在这一点上,您并没有让您的生活更轻松。因此,选择任何允许您将像素绘制到位图上的python库。有一些。
  • 考虑一下不试图在软件中绘制600,000行的东西 - 我只想直接与您的图形硬件交谈。
  • 只需使用比matplotlib低效的 less 。我喜欢pyqtgraph

pyqtgraph示例:

import pyqtgraph as pg
from PyQt4.QtGui import QApplication
import numpy
N=20
x = numpy.random.poisson(lam=0.01, size=(N,2000))
y = numpy.random.normal(size=(N,2000))
p = pg.plot()
for x_,y_ in zip(x,y):
    p.addItem(pg.PlotDataItem(x_,y_))
QApplication.instance().exec_()

答案 1 :(得分:0)

感谢大家。 最后,最佳解决方案是使用matplotlib.collections,因为它是由ImportanceOfBeingErnest建议的。 Image full