[英]Saving matplotlib subplot figure to image file
我對matplotlib
還是相當matplotlib
並且正在步。 就是說,我沒有找到這個問題的明顯答案。
我有一個散點圖,希望按組進行着色,看起來像通過循環繪制是滾動的方式 。
這是我的可復制示例,基於上面的第一個鏈接:
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()
, plt.savefig()
得到空白的白色圖片。 這個問題表明這是由於在savefig()
之前調用show()
引起的,但我已將其完全注釋掉了。 另一個問題有一條評論,建議我可以直接保存ax
對象,但這切斷了我的傳說:
相同的問題還有一個替代方法,而是使用fig.savefig()
。 我得到同樣的傳說。
這個問題似乎很相關,但是我沒有直接繪制DataFrame
,所以我不確定如何應用答案(其中dtf
是他們正在繪制的pd.DataFrame
):
plot = dtf.plot()
fig = plot.get_figure()
fig.savefig("output.png")
感謝您的任何建議。
編輯:要測試下面的建議,嘗試tight_layout()
,我運行了它,但仍然得到了空白的白色圖像文件:
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)
fig.tight_layout()
plt.savefig('test.png')
刪除行plt.figure(figsize=(12, 9))
,它將按預期工作。 即在show
前致電savefig
。
問題在於,要保存的圖形是由plt.figure()
創建的plt.figure()
,而所有數據都繪制到在此之前創建的ax
上(而在另一張圖形中,不是保存的圖形)。
為了保存包括圖例的圖形,請使用bbox_inches="tight"
選項
plt.savefig('test.png', bbox_inches="tight")
當然也可以直接保存圖形對象,
fig.savefig('test.png', bbox_inches="tight")
要更深入地了解如何將圖例移出情節,請參閱此答案 。
當bbox_inches='tight'
, 'pad_inches=0.1'
可能需要設置為更大的值時,@ ImportanceOfBeingErnest答案的其他補充。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.