Eliminar espacios en blanco alrededor de una imagen guardada

Resuelto Ahmet Tuğrul Bayrak asked hace 12 años • 16 respuestas

Necesito tomar una imagen y guardarla después de algún proceso. La figura se ve bien cuando la muestro, pero después de guardarla, tengo un espacio en blanco alrededor de la imagen guardada. Probé la 'tight'opción del savefigmétodo y tampoco funcionó. El código:

import matplotlib.image as mpimg
import matplotlib.pyplot as plt

fig = plt.figure(1)
img = mpimg.imread("image.jpg")
plt.imshow(img)
ax = fig.add_subplot(1, 1, 1)

extent = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
plt.savefig('1.png', bbox_inches=extent)

plt.axis('off') 
plt.show()

Estoy intentando dibujar un gráfico básico usando NetworkX en una figura y guardarlo. Me di cuenta de que sin un gráfico funciona, pero cuando agrego un gráfico obtengo espacios en blanco alrededor de la imagen guardada;

import matplotlib.image as mpimg
import matplotlib.pyplot as plt
import networkx as nx

G = nx.Graph()
G.add_node(1)
G.add_node(2)
G.add_node(3)
G.add_edge(1, 3)
G.add_edge(1, 2)
pos = {1:[100, 120], 2:[200, 300], 3:[50, 75]}

fig = plt.figure(1)
img = mpimg.imread("image.jpg")
plt.imshow(img)
ax = fig.add_subplot(1, 1, 1)

nx.draw(G, pos=pos)

extent = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
plt.savefig('1.png', bbox_inches=extent)

plt.axis('off') 
plt.show()
Ahmet Tuğrul Bayrak avatar Aug 07 '12 08:08 Ahmet Tuğrul Bayrak
Aceptado

Puede eliminar el relleno de espacios en blanco configurando bbox_inches="tight"en savefig:

plt.savefig("test.png",bbox_inches='tight')

Tendrás que poner el argumento bbox_inchescomo una cadena, tal vez por eso no funcionó antes.


Posibles duplicados:

Gráficos de Matplotlib: eliminación de ejes, leyendas y espacios en blanco

¿Cómo establecer los márgenes para una figura matplotlib?

Reducir los márgenes izquierdo y derecho en el gráfico matplotlib

Hooked avatar Aug 07 '2012 13:08 Hooked

No puedo afirmar que sepa exactamente por qué o cómo funciona mi “solución”, pero esto es lo que tuve que hacer cuando quise trazar el contorno de un par de secciones de perfil aerodinámico, sin márgenes blancos, en un archivo PDF. (Tenga en cuenta que utilicé matplotlib dentro de un cuaderno IPython, con el indicador -pylab).

plt.gca().set_axis_off()
plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, 
            hspace = 0, wspace = 0)
plt.margins(0,0)
plt.gca().xaxis.set_major_locator(plt.NullLocator())
plt.gca().yaxis.set_major_locator(plt.NullLocator())
plt.savefig("filename.pdf", bbox_inches = 'tight',
    pad_inches = 0)

He intentado desactivar diferentes partes de esto, pero esto siempre genera un margen blanco en alguna parte. Es posible que incluso tengas que modificar esto para evitar que las líneas gruesas cercanas a los límites de la figura se afeiten por la falta de márgenes.

Johannes S. avatar Dec 01 '2014 11:12 Johannes S.