将matplotlib子图图保存到图像文件中

时间:2017-12-23 23:04:33

标签: python matplotlib figure

我对matplotlib相当新,并且一直在跛行。也就是说,我还没有找到这个问题的明显答案。

我有一个我希望按群组着色的散点图,看起来plotting via a loop就是way to roll

这是我可重复的示例,基于上面的第一个链接:

import matplotlib.pyplot as plt
import pandas as pd
from pydataset import data

df = data('mtcars').iloc[0:10]
df['car'] = df.index

fig, ax = plt.subplots(1)
plt.figure(figsize=(12, 9))
for ind in df.index:
    ax.scatter(df.loc[ind, 'wt'], df.loc[ind, 'mpg'], label=ind)
ax.legend(bbox_to_anchor=(1.05, 1), loc=2)
# plt.show()
# plt.savefig('file.png')

取消注释plt.show()会产生我想要的内容:

good plot

搜索,看起来plt.savefig()是保存文件的方式;如果我重新评论plt.show()并运行plt.savefig(),我会得到一张空白的白色照片。 This question,建议这是show()之前调用savefig()的原因,但我已将其完全注释掉了。 Another question有评论建议我可以直接保存ax对象,但这会切断我的传奇:

chopped legend

同样的问题还有一个使用fig.savefig()的替代方案。我得到了相同的切碎传奇。

this question似乎有关,但我没有直接绘制DataFrame,所以我不确定如何应用答案({{1}是他们正在密谋的dtf

pd.DataFrame

感谢您的任何建议。

修改以测试下面的建议尝试plot = dtf.plot() fig = plot.get_figure() fig.savefig("output.png") ,我跑了这个并且仍然得到一张空白的白色图片文件:

tight_layout()

2 个答案:

答案 0 :(得分:2)

删除行plt.figure(figsize=(12, 9)),它将按预期工作。即在savefig之前致电show

问题在于保存的图形是由plt.figure()创建的图形,而所有数据都绘制为ax之前创建的图形(并且在不同的图形中,而不是一个人得救了。)

要保存包含图例的图形,请使用bbox_inches="tight"选项

plt.savefig('test.png', bbox_inches="tight")

当然可以直接保存图形对象,

fig.savefig('test.png', bbox_inches="tight")

要更深入地了解如何将图例移出图表,请参阅this answer

答案 1 :(得分:1)

@ImportanceOfBeingErnest答案的其他加法,当bbox_inches='tight''pad_inches=0.1'可能需要设置为更大的值时。