绘制大型数组时出现内存错误

时间:2016-10-12 13:40:43

标签: python python-2.7 memory matplotlib

我在使用spyder在python 2.7上绘制大数据时遇到了问题。

X,Y和Z大约是560,000个阵列长度...很多!

# ======
## plot:

fig = plt.figure("Map 3D couleurs")
ax = fig.add_subplot(111, projection='3d')

surf = ax.plot_trisurf(Xs, Ys, Zs, cmap=cm.jet, linewidth=0)
fig.colorbar(surf)

ax.set_xlabel("X")
ax.set_ylabel("Y")
ax.set_zlabel("Z")
ax.set_title("Map 3D couleurs")

#ax.xaxis.set_major_locator(MaxNLocator(5))
#ax.yaxis.set_major_locator(MaxNLocator(6))
#ax.zaxis.set_major_locator(MaxNLocator(5))

fig.tight_layout()

plt.show();

Python回复此帖:

Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\matplotlib\backends\backend_qt5.py", line 427, in idle_draw
    self.draw()
  File "C:\Python27\lib\site-packages\matplotlib\backends\backend_qt5agg.py", line 148, in draw
    FigureCanvasAgg.draw(self)
  File "C:\Python27\lib\site-packages\matplotlib\backends\backend_agg.py", line 469, in draw
    self.figure.draw(self.renderer)
  File "C:\Python27\lib\site-packages\matplotlib\artist.py", line 59, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "C:\Python27\lib\site-packages\matplotlib\figure.py", line 1085, in draw
    func(*args)
  File "C:\Python27\lib\site-packages\mpl_toolkits\mplot3d\axes3d.py", line 254, in draw
    for col in self.collections]
  File "C:\Python27\lib\site-packages\mpl_toolkits\mplot3d\art3d.py", line 580, in do_3d_projection
    PolyCollection.set_verts(self, segments_2d)
  File "C:\Python27\lib\site-packages\matplotlib\collections.py", line 842, in set_verts
    self._paths.append(mpath.Path(xy, codes))
MemoryError

你有想法在python 2.7上解决这个问题。 可能是其他库,函数......还是停止使用python?!

2 个答案:

答案 0 :(得分:2)

您是否需要长度560'000数组的详细信息量?如果没有,您可以使用例如:

轻松地对数组进行子采样
n = 1000   # sample every n-th data point
surf = ax.plot_trisurf(Xs[::n], Ys[::n], Zs[::n], cmap=cm.jet, linewidth=0)

答案 1 :(得分:-1)

尝试部分读取文件,不要一次设置数据 例如,在一行中只放一个数据 然后读取元组(x,y,z)并绘制并重复