使用matplotlib'保存python熊猫生成的绘图(AxesSubPlot);s savefig

使用matplotlib'保存python熊猫生成的绘图(AxesSubPlot);s savefig,python,matplotlib,pandas,Python,Matplotlib,Pandas,我正在使用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

我正在使用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, in <module>
    ax = 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
编辑2: 下面的代码也可以正常工作

dtf2.plot().get_figure().savefig('output.png')

因此,我不完全确定为什么会这样,但它会用我的绘图保存图像:

dtf = pd.DataFrame.from_records(d,columns=h)
dtf2.plot()
fig = plt.gcf()
fig.savefig('output.png')

我猜我的原始帖子的最后一个片段保存为空白,因为该图从未获得熊猫生成的轴。使用上面的代码,通过gcf()调用(获取当前图形)从某种神奇的全局状态返回figure对象,该调用会自动烘焙上面一行中绘制的轴。

gcf方法在V0.14中被去除,下面的代码适用于我:

plot = dtf.plot()
fig = plot.get_figure()
fig.savefig("output.png")

plot()
函数之后使用
plt.savefig()
函数对我来说似乎很容易:

import matplotlib.pyplot as plt
dtf = pd.DataFrame.from_records(d,columns=h)
dtf.plot()
plt.savefig('~/Documents/output.png')

这可能是一种更简单的方法:

(DesiredFigure.get_figure().savefig('figure_name.png'))

i、 e


您可以使用
ax.figure.savefig()
,如问题注释所示:

将熊猫作为pd导入
df=pd.DataFrame([0,1])
ax=df.plot.line()
ax.figure.savefig('demo-file.pdf')
与其他答案中建议的ax.get_figure().savefig()相比,这没有任何实际好处,因此您可以选择最美观的选项。事实上:

#来源于上面链接的代码片段
def get_图(自身):
“”“返回艺术家所属的`.Figure`实例。”“”
回归自我形象
  • 其他答案涉及将绘图保存为单个绘图,而不是子绘图
  • 如果存在子批次,绘图API将返回的
    numpy.ndarray
将熊猫作为pd导入
将seaborn作为sns导入样本数据
将matplotlib.pyplot作为plt导入
#加载数据
df=sns.load_数据集('iris')
#显示(df.head())
萼片长萼片宽花瓣长花瓣宽种
0.5.1 3.5 1.4 0.2刚毛
1 4.9 3.0 1.4 0.2刚毛
2 4.7 3.2 1.3 0.2刚毛
3.4.6 3.1 1.5 0.2刚毛
4.5.0 3.6 1.4 0.2刚毛
密谋
  • 下面的示例使用了
    kind='hist'
    ,但在指定
    'hist'
    以外的内容时是相同的解决方案
  • 使用
    [0]
    从数组中获取一个
    ,并使用
    .get\u figure()
    提取图形
fig=df.plot(kind='hist',subplot=True,figsize=(6,6))[0].get_figure()
plt.紧_布局()
图savefig('test.png'))

密谋 1:
  • 在本例中,我们将
    df.hist
    分配给使用
    plt.subplot
    创建的
    Axes
    ,并保存该
    fig
  • 4
    1
    分别用于
    nrows
    ncol
    ,但也可以使用其他配置,如
    2
    2
fig,ax=plt.子批次(nrows=4,ncols=1,figsize=(6,6))
df.hist(ax=ax)
plt.紧_布局()
图savefig('test.png'))

2:
  • 使用
    .ravel()
    展平
    轴阵列
fig=df.hist().ravel()[0]。获取图()
plt.紧_布局()
图savefig('test.png'))

能否请您用一个例子补充一些解释?如果您在同一个函数中创建多个图形,则这不起作用(但在jupyter笔记本电脑单元中有效)。
plot = dtf.plot()
fig = plot.get_figure()
fig.savefig("output.png")
import matplotlib.pyplot as plt
dtf = pd.DataFrame.from_records(d,columns=h)
dtf.plot()
plt.savefig('~/Documents/output.png')
dfcorr.hist(bins=50).get_figure().savefig('correlation_histogram.png')