如何使用matplotlib以压缩600 dpi保存tiff中的数字?

时间:2018-03-06 10:55:46

标签: python matplotlib

最近,我决定从MATLAB移植到Matplotlib来绘制我的图表。在MATLAB中,我要做的只是转到文件> export> render然后选择600 dpi然后选择apply to figure然后导出。在Matplotlib中,我使用matplotlib库中的命令savefig作为

matplotlib.pyplot.savefig(fname, dpi=None, facecolor='w', edgecolor='w',
    orientation='portrait', papertype=None, format=None,
    transparent=False, bbox_inches=None, pad_inches=0.1,
    frameon=None).

然后我将dpi设置为600并将.tiff设置为输出格式。这工作正常,但文件非常大~32 MB。很明显,我不能在期刊手稿中使用这么大的文件。我想知道是否有办法将压缩合并到文件中,以便可以获得更小的图像文件而不会损失分辨率。

2 个答案:

答案 0 :(得分:1)

截至目前,无法为tiff格式添加压缩。有一个开放的issue和一个有效的solution,但自去年五月左右以来没有取得过进展。

在工作解决方案中,有一个建议的工作流程和引用

  

...用MPL生成巨大的TIFF图像文件,然后在PIL中导入它们,保存   他们在PIL中使用压缩TIFF然后丢弃   未压缩的TIFF文件。

scikit-image项目有一些tiff图片保存functionality并进行了压缩,根据您的使用情况,它可能对您有帮助。

除了tiff之外,期刊最有可能接受其他格式。然后你可以去pngjpeg,DPI为600,基本上可以用于期刊的所有目的。

答案 1 :(得分:1)

matplotlib版本3.1.0开始,现在可以directly pass parameters to PIL when saving a figure via the kwarg pil_kwarg

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

fig.savefig('/tmp/foo.tiff', dpi=600, format="tiff", pil_kwargs={"compression": "tiff_lzw"})

但是要小心输入错误,因为savefig似乎会默默地吞下不受支持的kwarg,例如pil_kwargssss ...

此功能是在this PR中引入的,它取代了PR linked by Ignacio Vergara Kausel in his response