matplotlib savefig în format jpeg (Programare, Matplotlib, Jpeg, Figura)

cedm34 a intrebat.

Folosesc matplotlib (în cadrul pylab) pentru a afișa cifre. Și vreau să le salvez în format .jpg. Când folosesc pur și simplu comanda savefig cu extensia jpg aceasta returnează :

ValueError: Format "jpg" is not supported.

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

Există o modalitate de a efectua acest lucru ?

Comentarii

  • Se poate exporta în format png, și converti folosind imagemagick ? –  > Por Yann.
  • Nu are legătură directă cu problema dvs., dar arta liniară produsă de obicei de matplotlib nu funcționează bine cu algoritmul de compresie utilizat de formatul JPEG, care a fost conceput pentru fotografii neclare. Comparați, de exemplu, acuitatea liniilor din răspunsul lui Yann sau img.labnol.org/di/jpg_vs_png.png –  > Por Benjamin Bannier.
  • Pentru figurile care prezintă puncte, linii și/sau curbe, folosesc întotdeauna un format grafic vectorial, cum ar fi eps, ps, pdf și cred că emf, mai degrabă decât un format grafic rasterizat, cum ar fi png sau jpg. Acest lucru produce figuri care pot fi redimensionate fără pierderi de rezoluție și dimensiuni de fișier mult mai mici. Dacă treceți de la png la pdf, ați putea reduce dimensiunea imaginii de la 400 kB la 40 kB. Veți obține rezultate similare cu emf, iar MS Office (dacă nu sunteți suficient de norocos să folosiți LaTeX) se descurcă bine cu emf. –  > Por Chad.
5 răspunsuri
Yann

Puteți salva o imagine ca ‘png’ și folosi biblioteca python imaging (PIL) pentru a converti acest fișier în ‘jpg’:

import Image
import matplotlib.pyplot as plt

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

Originalul:

Imaginea JPEG:

Comentarii

  • python imaging library (PIL) nu este atât de ușor de instalat pe Mac OS cu python 2.7.2… Se vorbește despre „eroare gcc-4.0…” 🙁 –  > Por cedm34.
divenex

Pentru a clarifica și actualiza răspunsul util al lui @neo și întrebarea inițială. O soluție curată constă în instalarea Pillow, , care este o versiune actualizată a Python Imaging Library (PIL). Acest lucru se face utilizând

pip install pillow

Odată ce Pillow este instalat, comenzile standard Matplotlib

import matplotlib.pyplot as plt

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

va salva figura într-un fișier JPEG și va nu mai genera o eroare ValueError.

Contrar răspunsului lui @amillerrhodes, începând cu Matplotlib 3.1, fișierele JPEG încă nu sunt acceptate. Dacă înlătur pachetul Pillow, primesc în continuare un ValueError despre un tip de fișier neacceptat.

Comentarii

  • Eu am pillow și png funcționează bine. Primesc eroarea „IOError: encoder error -2 when writing image file” atunci când execut exact codul dvs. în Enthought Canopy. –  > Por Keith.
  • @Keith formatul PNG este acceptat din start de matplotlib, fără a fi nevoie de Pillow. Acest lucru sugerează că mesajul tău de eroare se datorează unei probleme cu instalarea Pillow. –  > Por divenex.
  • Pentru a fi complet: Am testat comenzile de mai sus pentru a funcționa atât sub Ubuntu Linux, cât și sub Windows, cu Anaconda distribuție –  > Por divenex.
letmaik

Trebuie doar să instalați pillow cu pip install pillow și va funcționa.

amillerrhodes

Tocmai am actualizat matplotlib la 1.1.0 pe sistemul meu și acum îmi permite să salvez în jpg cu savefig.

Pentru a face actualizarea la matplotlib 1.1.0 cu pip, , utilizați această comandă:

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

EDIT (pentru a răspunde la comentariu):

pylab este pur și simplu o agregare a spațiilor de nume matplotlib.pyplot și numpy (precum și a altor câteva) într-un singur spațiu de nume.

Pe sistemul meu, pylab este doar atât:

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

Puteți vedea că pylab este doar un alt spațiu de nume în instalarea matplotlib. Prin urmare, nu contează dacă îl importați sau nu cu pylab sau cu matplotlib.pyplot.

Dacă încă mai întâmpinați probleme, atunci bănuiesc că backend-ul macosx nu acceptă salvarea graficelor în jpg. Ați putea încerca să folosiți un alt backend. Consultați aici pentru mai multe informații.

Comentarii

  • Eu am matplotlib 1.1.0. Dar eu import pylab pe Mac, prin urmare, poate că versiunea de matplotlib inclusă nu este 1.1.0, dar nu știu cum să fiu sigur de asta. –  > Por cedm34.
Davidm

Matplotlib poate gestiona direct și transparent jpg dacă aveți instalat PIL. Nu trebuie să îl apelați, o va face de la sine. Dacă Python nu poate găsi PIL, va genera o eroare.