6

在 matplotlib 中,是否有任何(特别聪明的)方法来保存具有多个扩展名的图形?

用例:我通常想要 .png 用于快速查看、上传到网络等。但对于出版质量的数字,我想要 .pdf 或 .eps 文件。通常,我想要全部 3 个。

不难做到:

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

但它确实涉及大量重写代码(因为我现在通常savefig(figname+'.png')到处都有),这似乎是一个方便的包装函数的简单案例。

4

2 回答 2

6

如果你总是这样做

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

那么你可以想象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(...)

那么这将需要更多的努力。

于 2013-06-24T21:31:03.670 回答
3

您可以指定文件类型,如savefig 文档中所示,使用format. 但据我所知,您只能指定一种格式。

虽然不是特别聪明,但为了最大限度地减少重写代码,您应该编写一个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 但是我觉得这种事情可以帮助减少整体重复代码的数量。

于 2013-06-24T16:10:02.567 回答