【发布时间】:2015-05-17 20:54:12
【问题描述】:
我在 pandas 中有一个数据框(数据),它有一个日期时间索引(大约 25.000 天的数据)和 527 列 ID。
work_id_10 work_id_100 work_id_1007 work_id_1009
concert_date
1917-01-27 0 0 0 0
1917-01-28 0 0 0 0
1917-01-29 0 0 0 0
1917-01-30 0 0 0 0
1917-01-31 0 0 0 0
每个列 ID 用 0(不存在)或 1(存在)表示特定 ID 的存在或不存在。所以,基本上我所拥有的是一个二进制值矩阵。
我现在想创建一个图,其中所有日期都在 x 轴上,并且对于每个列 ID,存在作为点。我正在使用 ipython。
%matplotlib
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.set_yticklabels(data.index)
ax.set_xticklabels(data.columns)
plt.imshow/data, cmap='Greys', interpolation='none')
这给了我一个 MemoryError:
Traceback (most recent call last):
File "C:\Python27\Lib\lib-tk\Tkinter.py", line 1486, in __call__
return self.func(*args)
File "C:\Python27\Lib\lib-tk\Tkinter.py", line 533, in callit
func(*args)
File "C:\Python27\lib\site-packages\matplotlib\backends\backend_tkagg.py", lin
e 365, in idle_draw
self.draw()
File "C:\Python27\lib\site-packages\matplotlib\backends\backend_tkagg.py", lin
e 349, 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_wr
apper
draw(artist, renderer, *args, **kwargs)
File "C:\Python27\lib\site-packages\matplotlib\figure.py", line 1079, in draw
func(*args)
File "C:\Python27\lib\site-packages\matplotlib\artist.py", line 59, in draw_wr
apper
draw(artist, renderer, *args, **kwargs)
File "C:\Python27\lib\site-packages\matplotlib\axes\_base.py", line 2092, in d
raw
a.draw(renderer)
File "C:\Python27\lib\site-packages\matplotlib\artist.py", line 59, in draw_wr
apper
draw(artist, renderer, *args, **kwargs)
File "C:\Python27\lib\site-packages\matplotlib\image.py", line 367, in draw
self._draw_unsampled_image(renderer, gc)
File "C:\Python27\lib\site-packages\matplotlib\image.py", line 321, in _draw_u
nsampled_image
self._get_unsampled_image(self._A, extent_in_ic, viewLim_in_ic)
File "C:\Python27\lib\site-packages\matplotlib\image.py", line 219, in _get_un
sampled_image
x = (x * 255).astype(np.uint8)
MemoryError
这是正确的方法吗?为什么会出现 MemoryError?
谢谢!
【问题讨论】:
-
如果没有看到更多代码和数据的最小示例,很难为您提供有效的东西。假设你做了类似
fig, ax = plt.subplots()然后你的plt.plot(...)你想设置你的y 轴刻度标签像这样ax.set_yticklabels(something)其中一些是你的列名列表。 -
感谢@Scott 为我指明了正确的方向。我没有任何其他代码,但我已经尝试过了,现在遇到了 MemoryError。我已经相应地更新了我最初的问题。感谢您再次查看!
-
进一步划分问题。例如,注释掉 ticklabel 行,它还会中断吗?使用 4×4 的 1 和 0 的虚拟
data进行操作;还是坏了?等等。将最后一个示例行中的 '/' 替换为 '('。(我强烈建议使用脚本文件而不是解释器。其他情况有所不同,但是在您学习时,不要设置自己为 cut - 并粘贴错误。) -
您是否要绘制 25000 x 527 矩阵?您可能希望将数据分解为年份,以便拥有 365 x 527 或类似的尺寸。
标签: python matrix pandas matplotlib plot