tiempo savefig real matrices graficos graficas graficar ejes coordenadas python image numpy matplotlib scipy

savefig - python graficos 2d



scipy: savefig sin marcos, ejes, solo contenido (8)

En numpy / scipy tengo una imagen almacenada en una matriz. Puedo mostrarlo, quiero guardarlo usando savefig sin fronteras, ejes, etiquetas, títulos ... Solo imagen pura, nada más.

Quiero evitar paquetes como PyPNG o scipy.misc.imsave , a veces son problemáticos (no siempre se instalan bien, solo savefig() básico para mí)


Asumiendo :

import matplotlib.pyplot as plt

Para hacer una figura sin el marco:

fig = plt.figure(frameon=False) fig.set_size_inches(w,h)

Para que el contenido llene toda la figura

ax = plt.Axes(fig, [0., 0., 1., 1.]) ax.set_axis_off() fig.add_axes(ax)

Luego dibuja tu imagen en él:

ax.imshow(your_image, aspect=''normal'') fig.savefig(fname, dpi)

El parámetro aspect cambia el tamaño del píxel para asegurarse de que llenan el tamaño de figura especificado en fig.set_size_inches(…) . Para tener una idea de cómo jugar con este tipo de cosas, lea la documentación de matplotlib , especialmente sobre el tema de ejes, eje y artista.


Este trabajo para mí

plt.savefig(''filename'',bbox_inches=''tight'',transparent=True, pad_inches=0)


He intentado varias opciones en mi caso, y la mejor solución fue esta:

fig.subplots_adjust(bottom = 0) fig.subplots_adjust(top = 1) fig.subplots_adjust(right = 1) fig.subplots_adjust(left = 0)

luego guarda tu figura con savefig


Puede encontrar la bbox de la imagen dentro del eje (usando get_window_extent ) y usar el parámetro bbox_inches para guardar solo esa parte de la imagen:

import numpy as np import matplotlib.pyplot as plt data=np.arange(9).reshape((3,3)) fig=plt.figure() ax=fig.add_subplot(1,1,1) plt.axis(''off'') plt.imshow(data) extent = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted()) plt.savefig(''/tmp/test.png'', bbox_inches=extent)

Aprendí este truco de Joe Kington here .


Si bien las respuestas anteriores abordan la eliminación de los márgenes y el relleno, no funcionaron para mí en la eliminación de etiquetas. Esto es lo que funcionó, para cualquiera que tropiece con esta pregunta más tarde:

Suponiendo que quiere una grilla de subtramas de 2x2 a partir de cuatro imágenes almacenadas en images :

matplotlib.pyplot.figure(figsize = (16,12)) # or whatever image size you require for i in range(4): ax = matplotlib.pyplot.subplot(2,2,i+1) ax.axis(''off'') imshow(images[i]) matplotlib.pyplot.savefig(path, bbox_inches=''tight'')


Sugeriré la respuesta de heron13 con una pequeña adición tomada de here para eliminar el relleno que queda después de configurar la bbox en modo apretado, por lo tanto:

fig.axes.get_xaxis().set_visible(False) fig.axes.get_yaxis().set_visible(False) fig.savefig(''out.png'', bbox_inches=''tight'', pad_inches=0)


Tuve el mismo problema al hacer una visualización usando librosa donde quería extraer el contenido de la trama sin ninguna otra información. Así que este es mi enfoque. La respuesta unutbu también me ayuda a trabajar.

figure = plt.figure(figsize=(500, 600), dpi=1) axis = plt.subplot(1, 1, 1) plt.axis(''off'') plt.tick_params(axis=''both'', left=''off'', top=''off'', right=''off'', bottom=''off'', labelleft=''off'', labeltop=''off'', labelright=''off'', labelbottom=''off'') # your code goes here. e.g: I used librosa function to draw a image result = np.array(clip.feature_list[''fft''].get_logamplitude()[0:2]) librosa.display.specshow(result, sr=api.Clip.RATE, x_axis=''time'', y_axis=''mel'', cmap=''RdBu_r'') extent = axis.get_window_extent().transformed(figure.dpi_scale_trans.inverted()) plt.savefig((clip.filename + str("_.jpg")), format=''jpg'', bbox_inches=extent, pad_inches=0) plt.close()


Una solución más fácil parece ser:

fig.savefig(''out.png'', bbox_inches=''tight'', pad_inches=0)