web-dev-qa-db-fra.com

matplotlib savefig au format jpeg

J'utilise matplotlib (dans pylab) pour afficher les chiffres. Et je veux les enregistrer au format .jpg. Lorsque j'utilise simplement la commande savefig avec l'extension jpg, cela renvoie:

ValueError: Format "jpg" is not supported.

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

Existe-t-il un moyen d'effectuer cela?

30
cedm34

Vous pouvez enregistrer une image au format 'png' et utiliser la bibliothèque d'imagerie python PIL) pour convertir ce fichier en 'jpg':

import Image
import matplotlib.pyplot as plt

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

L'original:

enter image description here

L'image JPEG:

enter image description here

38
Yann

Pour clarifier et mettre à jour la réponse utile @neo et la question d'origine. Une solution propre consiste à installer Pillow , qui est une version mise à jour de Python Imaging Library (PIL). Cela se fait en utilisant

pip install pillow

Une fois Pillow installé, les commandes standard de Matplotlib

import matplotlib.pyplot as plt

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

enregistrera la figure dans un fichier JPEG et ne générera plus une ValueError.

Contrairement à la réponse de @amillerrhodes, depuis Matplotlib 2.0, les fichiers JPEG ne semblent pas être pris en charge. Si je supprime le package Pillow, je reçois toujours une ValueError concernant un type de fichier non pris en charge.

24
divenex

Installez simplement l'oreiller avec pip install pillow et cela fonctionnera.

7
letmaik

Je viens de mettre à jour matplotlib vers 1.1.0 sur mon système et cela me permet maintenant d'enregistrer en jpg avec savefig.

Pour passer à matplotlib 1.1.0 avec pip, utilisez cette commande:

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

EDIT (pour répondre au commentaire):

pylab est simplement une agrégation des espaces de noms matplotlib.pyplot et numpy (ainsi que quelques autres) en un seul espace de noms.

Sur mon système, pylab est juste ceci:

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

Vous pouvez voir que pylab n'est qu'un autre espace de noms dans votre installation matplotlib. Par conséquent, peu importe que vous l'importiez avec pylab ou avec matplotlib.pyplot.

Si vous rencontrez toujours des problèmes, je suppose que le backend macosx ne prend pas en charge l'enregistrement des tracés en jpg. Vous pouvez essayer d'utiliser un backend différent. Voir ici pour plus d'informations.

4
amillerrhodes

Matplotlib peut gérer directement et de manière transparente jpg si vous avez installé PIL. Vous n'avez pas besoin de l'appeler, il le fera tout seul. Si Python ne peut pas trouver PIL, il générera une erreur.

1
Davidm