web-dev-qa-db-ja.com

jpeg形式のmatplotlib savefig

Matplotlib(pylab内)を使用して図を表示しています。そして、それらを.jpg形式で保存したいと思います。 jpg拡張子を付けてsavefigコマンドを使用するだけで、次の結果が返されます。

ValueError: Format "jpg" is not supported.

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

これを実行する方法はありますか?

30
cedm34

画像を「png」として保存し、python Imaging Library(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

38
Yann

@neoの有用な回答と元の質問を明確にして更新するため。クリーンなソリューションは、 Pillow のインストールで構成されます。これは、Python Imaging Library(PIL)の更新バージョンです。これは、

pip install pillow

Pillowがインストールされると、標準のMatplotlibコマンド

import matplotlib.pyplot as plt

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

図をJPEGファイルに保存し、notValueErrorを生成します。

Matplotlib 2.0の時点で、@ amillerrhodesの回答に反して、JPEGファイルはサポートされていないようです。 Pillowパッケージを削除しても、サポートされていないファイルタイプに関するValueErrorが表示されます。

24
divenex

pip install pillowそしてそれは動作します。

7
letmaik

システムでmatplotlibを1.1.0に更新したところ、savefigでjpgに保存できるようになりました。

pipを使用してmatplotlib 1.1.0にアップグレードするには、次のコマンドを使用します。

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インストールの別のネームスペースであることがわかります。したがって、pylabまたはmatplotlib.pyplotでインポートするかどうかは関係ありません。

それでも問題が発生する場合は、macosxバックエンドがjpgへのプロットの保存をサポートしていないと推測します。別のバックエンドを使用してみてください。詳細については、 here を参照してください。

4
amillerrhodes

PILをインストールしている場合、matplotlibはjpgを直接かつ透過的に処理できます。あなたはそれを呼び出す必要はありません、それはそれ自体で行います。 Python PILが見つからない場合、エラーが発生します。

1
Davidm