esilik
Utilicé matplotlib para trazar algunos resultados experimentales (lo discutí aquí: bucle sobre archivos y trazado). Sin embargo, guardar la imagen haciendo clic derecho en la imagen da imágenes de muy mala calidad/baja resolución.
from glob import glob
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
# loop over all files in the current directory ending with .txt
for fname in glob("./*.txt"):
# read file, skip header (1 line) and unpack into 3 variables
WL, ABS, T = np.genfromtxt(fname, skip_header=1, unpack=True)
# first plot
plt.plot(WL, T, label="BN", color="blue")
plt.xlabel('Wavelength (nm)')
plt.xlim(200,1000)
plt.ylim(0,100)
plt.ylabel('Transmittance, %')
mpl.rcParams.update({'font.size': 14})
#plt.legend(loc="lower center")
plt.title('')
plt.show()
plt.clf()
# second plot
plt.plot(WL, ABS, label="BN", color="red")
plt.xlabel('Wavelength (nm)')
plt.xlim(200,1000)
plt.ylabel('Absorbance, A')
mpl.rcParams.update({'font.size': 14})
#plt.legend()
plt.title('')
plt.show()
plt.clf()
Gráfico de ejemplo de lo que estoy buscando: gráfico de ejemplo
Ohad Eytan
Puedes usar savefig()
para exportar a un archivo de imagen:
plt.savefig('filename.png')
Además, puede especificar el dpi
argumento a algún valor escalar, por ejemplo:
plt.savefig('filename.png', dpi=300)
-
No puedo especificar un nombre de archivo así. El script pasa por los archivos en ‘fname in glob(“./*.txt”)’.
– esilik
5 de octubre de 2016 a las 10:06
-
llama al archivo como quieras
– Ohad Eytan
5 oct 2016 a las 10:07
-
Sobrescribirá los datos y solo dará dos imágenes. ¿no es así? Mi objetivo es obtener dos gráficos para cada archivo de texto.
– esilik
5 oct 2016 a las 10:12
-
Asegúrate de poner savefig antes de plt.show(). De lo contrario, su imagen guardada estará en blanco.
–Brian Fitzgerald
23 de julio de 2021 a las 1:19
-
esto agrega un montón de espacio en blanco alrededor de la figura, para arreglar esto tuve que agregar
bbox_inches="tight"
aplt.savefig()
– YPOC
28 de febrero de 2022 a las 13:48
Ofir Carmi
Usar plt.figure(dpi=1200)
ante todos tus plt.plot...
y en el uso final plt.savefig(...)
.
-
@deepfriedcyanide me ayudó en mi vieja pregunta diciendo: “El argumento del nombre de archivo para savefig es solo una cadena, por lo que puede hacer algo como: plt.savefig(‘carpeta/archivo%d.png’ % n) con un valor que cuenta después de cada gráfico.“Pero aún no entiendo la idea. ¿Dónde debo poner estos códigos en mi script y cómo?
– esilik
5 oct 2016 a las 10:00
-
Genial, ahora puede producir higos con calidad de publicación en un cuaderno Jupyter. ejecutándose en un servidor, y luego puede simplemente hacer clic derecho y “guardar como”. ¡Perfecto! No hay necesidad de
plt.savefig(...)
– kungphil
2 de noviembre de 2022 a las 21:31
Christian Seitz
Para los futuros lectores que encontraron esta pregunta mientras intentaban guardar imágenes de alta resolución de matplotlib como yo, probé algunas de las respuestas anteriores y en otros lugares, y las resumí aquí.
Mejor resultado: plt.savefig('filename.pdf')
y luego convertir este pdf a png en la línea de comando para que pueda usarlo en powerpoint:
pdftoppm -png -r 300 filename.pdf filename
O simplemente abriendo el pdf y recortando la imagen que necesita en adobe, guardando como png e importando la imagen a powerpoint
Prueba menos exitosa #1: plt.savefig('filename.png', dpi=300)
Esto guarda la imagen con una resolución un poco más alta que la normal, pero no es lo suficientemente alta para la publicación o algunas presentaciones. El uso de un valor de ppp de hasta 2000 aún producía imágenes borrosas cuando se veían de cerca.
Prueba menos exitosa #2: plt.savefig('filename.pdf')
Esto no se puede abrir en Microsoft Office Professional Plus 2016 (por lo que no hay PowerPoint), lo mismo con Google Slides.
Prueba menos exitosa #3: plt.savefig('filename.svg')
Esto tampoco se puede abrir en PowerPoint o Google Slides, con el mismo problema que el anterior.
Prueba menos exitosa #4: plt.savefig('filename.pdf')
y luego convertir a png en la línea de comando:
convert -density 300 filename.pdf filename.png
pero esto todavía es demasiado borroso cuando se ve de cerca.
Prueba menos exitosa #5: plt.savefig('filename.pdf')
y abrir en GIMP, y exportar como png de alta calidad (aumentó el tamaño del archivo de ~ 100 KB a ~ 75 MB)
Prueba menos exitosa #6: plt.savefig('filename.pdf')
y luego convertir a jpeg en la línea de comando:
pdfimages -j filename.pdf filename
Esto no produjo ningún error, pero no produjo una salida en Ubuntu incluso después de cambiar varios parámetros.
-
.pdf
fue la mejor calidad para mí también. Calidad bastante perfecta ampliada hasta el final, como 4k. En lugar de convertir en la línea de comandos, tomar una captura de pantalla del .pdf es lo suficientemente bueno para mí y guardarlo en un png.–David Erickson
5 de diciembre de 2020 a las 5:23
Puede guardar su gráfico como svg para una calidad sin pérdidas:
import matplotlib.pylab as plt
x = range(10)
plt.figure()
plt.plot(x,x)
plt.savefig("graph.svg")
jason
Para guardar el gráfico:
matplotlib.rcParams['savefig.dpi'] = 300
Para mostrar el gráfico cuando usa plt.show()
:
matplotlib.rcParams["figure.dpi"] = 100
Solo agrégalos en la parte superior
-
Finalmente, una respuesta en cuanto a MOSTRAR una figura de alta resolución, no guardar una. Esto es muy útil en los casos en que desea mostrar una figura guardada previamente sin tener los datos para graficarla y guardarla nuevamente.
– Bossa Nova
8 de agosto de 2022 a las 11:55
-
También puede especificarlo en
plt
, si eso es lo que está utilizando. Al igual que:plt.rcParams["figure.dpi"] = 100
También me resulta útil especificar figsize al mismo tiempo:plt.rcParams["figure.figsize"]=(5,3)
– scottlittle
19 sep 2022 a las 15:11
Jalo
Al final de tu para() bucle, puede utilizar el savefig()
función en lugar de plt.mostrar() y configura el nombre, dpi y formato de tu figura.
Por ejemplo, 1000 ppp y el formato eps son de muy buena calidad, y si desea guardar todas las imágenes en una carpeta ./ con los nombres ‘Sample1.eps’, ‘Sample2.eps’, etc., solo puede agregar el siguiente código:
for fname in glob("./*.txt"):
# Your previous code goes here
[...]
plt.savefig("./{}.eps".format(fname), bbox_inches="tight", format="eps", dpi=1000)
-
Finalmente, una respuesta en cuanto a MOSTRAR una figura de alta resolución, no guardar una. Esto es muy útil en los casos en que desea mostrar una figura guardada previamente sin tener los datos para graficarla y guardarla nuevamente.
– Bossa Nova
8 de agosto de 2022 a las 11:55
-
También puede especificarlo en
plt
, si eso es lo que está utilizando. Al igual que:plt.rcParams["figure.dpi"] = 100
También me resulta útil especificar figsize al mismo tiempo:plt.rcParams["figure.figsize"]=(5,3)
– scottlittle
19 sep 2022 a las 15:11
Shunya
En mi opinión, la mejor manera de hacerlo es utilizar %matplotlib notebook
función mágica.
He intentado todas las formas anteriores y el inconveniente de aumentar los ppp es que el tamaño de la figura o, por ejemplo, el tamaño de la ventana de la trama aumenta, lo cual no es deseado.
Si está buscando obtener la mejor resolución dentro del tamaño de su figura sin ajustar dpi, elija la función mágica.
También puede desactivar la interacción de la trama simplemente haciendo clic en el botón.