我对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()
会产生我想要的内容:
搜索,看起来plt.savefig()
是保存文件的方式;如果我重新评论plt.show()
并运行plt.savefig()
,我会得到一张空白的白色照片。 This question,建议这是show()
之前调用savefig()
的原因,但我已将其完全注释掉了。 Another question有评论建议我可以直接保存ax
对象,但这会切断我的传奇:
同样的问题还有一个使用fig.savefig()
的替代方案。我得到了相同的切碎传奇。
this question似乎有关,但我没有直接绘制DataFrame
,所以我不确定如何应用答案({{1}是他们正在密谋的dtf
:
pd.DataFrame
感谢您的任何建议。
修改以测试下面的建议尝试plot = dtf.plot()
fig = plot.get_figure()
fig.savefig("output.png")
,我跑了这个并且仍然得到一张空白的白色图片文件:
tight_layout()
答案 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'
可能需要设置为更大的值时。