2010-06-28 28 views
25

El siguiente código de ejemplo producirá un diagrama de puntos básico, sin ejes y guardarlo como un archivo SVG:imagen Matplotlib savefig recortar

import matplotlib.pyplot as plt 
plt.axis('off') 
plt.plot([1,3,1,2,3]) 
plt.plot([3,1,1,2,1]) 
plt.savefig("out.svg", transparent = True) 

¿Cómo se configura la resolución/dimensiones de la imagen? Hay relleno en todos los lados de la imagen más allá del gráfico de líneas. ¿Cómo elimino el relleno para que las líneas aparezcan en el borde de la imagen?

Respuesta

45

Estoy continuamente sorprendido de cuántas maneras hay para hacer lo mismo en matplotlib.
Como tal, estoy seguro de que alguien puede hacer que este código sea mucho más escueto.
En cualquier caso, esto debería demostrar claramente cómo resolver su problema.

>>> import pylab 
>>> fig = pylab.figure() 

>>> pylab.axis('off') 
(0.0, 1.0, 0.0, 1.0) 
>>> pylab.plot([1,3,1,2,3]) 
[<matplotlib.lines.Line2D object at 0x37d8cd0>] 
>>> pylab.plot([3,1,1,2,1]) 
[<matplotlib.lines.Line2D object at 0x37d8d10>] 

>>> fig.get_size_inches() # check default size (width, height) 
array([ 8., 6.]) 
>>> fig.set_size_inches(4,3) 
>>> fig.get_dpi()   # check default dpi (in inches) 
80 
>>> fig.set_dpi(40) 

# using bbox_inches='tight' and pad_inches=0 
# I managed to remove most of the padding; 
# but a small amount still persists 
>>> fig.savefig('out.svg', transparent=True, bbox_inches='tight', pad_inches=0) 

Documentation para savefig().

+4

¿hay alguna manera de poner estos en matplotlibrc? 'Tecla incorrecta" savefig.bbox_inches "' – endolith

+0

De nada. No sé si es posible proporcionar tales especificaciones de configuración usando un archivo matplotlibrc. – bernie

+0

Otro comando que me gusta usar (junto con los enumerados anteriormente) de pyplot es plt.tight_layout(), que elimina el exceso de espacio en blanco alrededor de la figura. – Blink

2

El objeto de eje predeterminado deja algo de espacio para títulos, etiquetas de ticks y similares. Haga su propio objeto eje que llena toda la zona:

fig=figure() 
ax=fig.add_axes((0,0,1,1)) 
ax.set_axis_off() 
ax.plot([3,1,1,2,1]) 
ax.plot([1,3,1,2,3]) 
fig.savefig('out.svg') 

en formato SVG no puedo ver la línea que está justo en la parte inferior, pero en formato png que pueda, por lo que es probablemente una función del procesador de SVG . Es posible que desee agregar solo un pequeño relleno para mantener todo visible.

+0

Correcto. Puede ajustar la posición de los ejes en la figura haciendo los ejes manualmente. El comando pyplot (o pylab) para hacer un eje incluye esto en su docstring: ejes (rect, axisbg = 'w') donde rect = [izquierda, inferior, ancho, alto] en unidades normalizadas (0,1). axisbg es el color de fondo para el eje, blanco predeterminado – timbo

Cuestiones relacionadas