python - matrices - Eliminar el espacio en blanco alrededor de una imagen guardada en matplotlib
python graficos 2d (5)
Necesito tomar una imagen y guardarla después de algún proceso. La figura se ve bien cuando la muestro, pero cuando guardo la figura obtuve un espacio en blanco alrededor de la imagen guardada. He probado la opción ''tight''
para el método savefig
, tampoco funcionó. El código:
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
fig = plt.figure(1)
img = mpimg.imread(path)
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 tratando de dibujar un gráfico básico usando NetworkX en una figura y guardarlo. Me di cuenta de que sin gráficos funciona, pero cuando se agrega un gráfico obtengo un espacio 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("C://images//1.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()
Encontré algo de Arvind Pereira ( http://robotics.usc.edu/~ampereir/wordpress/?p=626 ) y pareció funcionar para mí:
plt.savefig(filename, transparent = True, bbox_inches = ''tight'', pad_inches = 0)
Encontré que los siguientes códigos funcionan perfectamente para el trabajo.
fig = plt.figure(figsize=[6,6])
ax = fig.add_subplot(111)
ax.imshow(data)
ax.axes.get_xaxis().set_visible(False)
ax.axes.get_yaxis().set_visible(False)
ax.set_frame_on(False)
plt.savefig(''data.png'', dpi=400, bbox_inches=''tight'',pad_inches=0)
Esto funciona para mí guardar una matriz numpy trazada con imshow para archivo
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(10,10))
plt.imshow(img) # your image here
plt.axis("off")
plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0,
hspace = 0, wspace = 0)
plt.savefig("example2.png", box_inches=''tight'', dpi=100)
plt.show()
No puedo afirmar que sé exactamente por qué o cómo funciona mi "solución", pero esto es lo que tenía que hacer cuando quería 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).
gca().set_axis_off()
subplots_adjust(top = 1, bottom = 0, right = 1, left = 0,
hspace = 0, wspace = 0)
margins(0,0)
gca().xaxis.set_major_locator(NullLocator())
gca().yaxis.set_major_locator(NullLocator())
savefig("filename.pdf", bbox_inches = ''tight'',
pad_inches = 0)
He tratado de desactivar diferentes partes de esto, pero esto siempre lleva a un margen blanco en alguna parte. Incluso puede 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.
Puede eliminar el relleno de espacio en blanco configurando bbox_inches="tight"
en savefig
:
plt.savefig("test.png",bbox_inches=''tight'')
Tendrás que poner el argumento en bbox_inches
como una cadena, quizás es por eso que no funcionó antes para ti.
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?
Reduce los márgenes izquierdo y derecho en la trama matplotlib