2012-01-11 110 views
20

我正在使用matplotlib(在pylab内)来显示数字。我想将它们保存为.jpg格式。当我简单地使用savefig命令以JPG扩展它返回:jpg格式的matplotlib savefig

ValueError: Format "jpg" is not supported. 

Supported formats: emf, eps, pdf, png, ps, raw, rgba, svg, svgz.

有没有执行这个办法?

+0

你可以输出到PNG,并使用imagemagick转换? – Yann 2012-01-11 21:56:58

+1

与您的问题没有直接关系,但通常由matplotlib生成的线条艺术不适用于为模糊照片设计的JPEG格式使用的压缩算法。比较例如在Yann的回答中线条的锐度或http://img.labnol.org/di/jpg_vs_png.png – 2012-01-12 15:41:27

+0

对于显示点,线条和/或曲线的图形,我总是使用eps,ps,pdf等矢量图形格式,我认为emf而不是像png或jpg这样的光栅图形格式。这会产生可扩展的数字,而无需分辨率损失和更小的文件大小。从png到pdf,你可能会将图像大小从400 kB缩小到40 kB。你会得到与emf类似的结果,而MS Office(如果你没有幸运地使用LaTeX)可以很好地处理emf。 – Chad 2014-02-14 13:55:18

回答

24

您可以保存图像为 'PNG',并使用Python图像库(PIL)此文件为 'JPG' 转换:

import Image 
import matplotlib.pyplot as plt 

plt.plot(range(10)) 
plt.savefig('testplot.png') 
Image.open('testplot.png').save('testplot.jpg','JPEG') 

原:

enter image description here

JPEG图像:

enter image description here

有一些options用于控制图像的质量。

+0

蟒蛇图像库(PIL)不是很容易安装在Mac OS上与python 2.7.2 ...它是在谈论“错误gcc-4.0 ...”:-( – cedm34 2012-01-12 16:23:29

4

我刚刚在我的系统上更新了matplotlib到1.1.0,现在它允许我用savefig保存到jpg。

要升级到1.1.0 matplotlib与pip,使用这个命令:

pip install -U 'http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.1.0/matplotlib-1.1.0.tar.gz/download' 

EDIT(回应评论):

pylab简直是matplotlib.pyplot的聚集和numpy命名空间(以及其他几个)只有一个命名空间。

在我的系统,pylab仅仅是这样的:

from matplotlib.pylab import * 
import matplotlib.pylab 
__doc__ = matplotlib.pylab.__doc__ 

你可以看到,pylab是你matplotlib安装只是一个命名空间。因此,您是否用pylabmatplotlib.pyplot导入它并不重要。

如果您仍然遇到问题,那么我猜测macosx后端不支持将图块保存到jpg。你可以尝试使用不同的后端。有关更多信息,请参阅here

+0

我有matplotlib 1.1.0。但我我在Mac上导入pylab,因此可能包含的matplotlib版本不是1.1.0,但我不知道如何确定这一点。 – cedm34 2012-01-12 08:51:50

1

如果您安装了PIL,Matplotlib可以直接并透明地处理jpg。你不需要叫它,它会自己做。如果Python无法找到PIL,则会引发错误。

4

只要安装与pip install pillow枕头,它会工作。

13

澄清和更新@neo有用答案和原始问题。一个干净的解决方案包括安装Pillow,它是Python成像库(PIL)的更新版本。这是使用

pip install pillow 

一旦安装完成枕头,标准Matplotlib命令

import matplotlib.pyplot as plt 

plt.plot([1, 2]) 
plt.savefig('image.jpg') 

将图保存为JPEG文件,将产生一个ValueError了。

与@amillerrhodes回答相反,从Matplotlib 2.0开始,似乎不支持JPEG文件。如果我删除Pillow包,我仍然收到一个关于不支持的文件类型的ValueError。

+0

我有pillow和png工作正常。我得到错误“IOError:encoder error -2当编写图像文件时“当在Enthought Canopy中运行你的代码时 – Keith 2015-06-12 18:21:46

+0

@开箱即用的matplotlib支持PNG格式,而不需要Pillow。这表明你的错误信息是由于Pillow安装的问题引起的 – divenex 2015-07-16 08:39:01

+0

为了完整起见:我测试了上述命令,在Ubuntu Linux和Windows下使用[Anaconda](https://store.continuum.io/cshop/anaconda/)发布 – divenex 2015-07-16 09:36:22