簡體   English   中英

將matplotlib子圖圖形保存到圖像文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM