2013-06-24 68 views
4

在matplotlib中,是否有任何(特別聰明)的方式來保存具有多個擴展名的圖形?保存一個包含多個擴展名的圖形?

使用案例:我通常希望使用.png進行快速檢查,上傳到網絡等。但對於出版質量的數字,我想要.pdf或.eps文件。通常情況下,我希望所有的3

這並不難做到:

for suffix in 'png eps pdf'.split(): 
    pl.savefig(figname+"."+suffix) 

但它確實涉及到很多重寫代碼(因爲我通常只是savefig(figname+'.png')到處現在),這似乎是一個便於包裝功能。

回答

3

如果你總是這樣

from matplotlib import pyplot as pl 
... 
pl.savefig 

,那麼你可以concievably在一個地方重新分配pl.savefig,它會影響到所有的地方。

from matplotlib import pyplot as pl 
def save_figs(fn,types=('.pdf',)): 
    fig = pl.gcf() 
    for t in types: 
     fig.savefig(fn+t) 
pl.savefig = save_figs 

如果平時

fig=pl.figure() 
fig.savefig(...) 

那麼將需要更多的努力。

+0

中對它進行修補,你可以很好地修飾類。 – tacaswell

3

您可以使用format指定文件類型,如the documentation for savefig所示。但據我所知,你只能指定一種格式。

雖然不是特別聰明,但爲了最小化重寫代碼,您應該編寫一個save_fig函數。這可以處理自動創建適當的文件名和質量。

def save_fig(fig_name, quality="quick-look"): 
    if "quick-look" in quality: 
     # save fig with .png etc 
    if "pub-qual" in quality: 
     # save fig with increased dpi etc etc. 

也許不是你要找的,因爲它會要求你重寫每一個savefig的答案,但是我覺得這種東西可以幫助降低整體的重複代碼量。

+0

這是一個不錯的方法,我很樂意與它合作。我認爲如果matplotlib允許使用另一種語法來保存類似於此的savefig(prefix,types =('png','pdf'))',這將符合您所展示的內容。 – keflavich

+2

我會編寫你的包裝函數來獲取擴展名列表,然後在 – tacaswell