保存由Python pandas生成的带有matplotlib的savefig函数生成的绘图(AxesSubPlot)。
保存由Python pandas生成的带有matplotlib的savefig函数生成的绘图(AxesSubPlot)。
我正在使用pandas从数据框生成一个图表,我希望将其保存到文件中:
dtf = pd.DataFrame.from_records(d,columns=h) fig = plt.figure() ax = dtf2.plot() ax = fig.add_subplot(ax) fig.savefig('~/Documents/output.png')
最后一行使用matplotlib的savefig应该能解决问题。但是这段代码产生了以下错误:
Traceback (most recent call last): File "./testgraph.py", line 76, inax = fig.add_subplot(ax) File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/figure.py", line 890, in add_subplot assert(a.get_figure() is self) AssertionError
另外,试图直接在图表上调用savefig也会报错:
dtf2.plot().savefig('~/Documents/output.png') File "./testgraph.py", line 79, indtf2.plot().savefig('~/Documents/output.png') AttributeError: 'AxesSubplot' object has no attribute 'savefig'
我认为我需要以某种方式将plot()返回的subplot添加到一个图表中才能使用savefig。我还想知道这是否与AxesSubPlot类背后的magic有关。
编辑:
以下代码可以正常工作(没有引发错误),但是给我留下了一个空白页图像...
fig = plt.figure() dtf2.plot() fig.savefig('output.png')
编辑2:
下面的代码也可以正常工作
dtf2.plot().get_figure().savefig('output.png')
问题的出现原因是因为在使用Python的pandas库和matplotlib库生成的图表中,想要保存图表时出现了困惑。可以通过ax.figure.savefig()
的方式保存图表,代码示例如下:
import pandas as pd df = pd.DataFrame([0, 1]) ax = df.plot.line() ax.figure.savefig('demo-file.pdf')
这种保存方式和其他答案中提到的ax.get_figure().savefig()
没有实际的区别,所以可以选择自己最喜欢的方式进行保存。实际上,get_figure()
方法只是简单地返回self.figure
:
# 以上代码段链接到了上面的代码段 def get_figure(self): """Return the `.Figure` instance the artist belongs to.""" return self.figure
解决方法就是使用ax.figure.savefig()
或者ax.get_figure().savefig()
来保存生成的图表。