Matplotlib e Ipython-notebook: muestra exactamente la figura que se guardará

Estoy usando mucho ipython-notebook en este momento para el análisis numérico y el trazado de datos. En el proceso de preparación de gráficos de calidad de publicación hay muchos ajustes para obtener el diseño correcto, sin embargo, no puedo hacer que ipython / matplotlib me muestre lo que guardaré en el navegador. Hacer que el proceso sea más doloroso de lo que debería ser porque tengo que seguir abriendo el nuevo archivo de salida para comprobarlo.

¿Hay alguna manera de obtener la imagen que se muestra en línea para que sea igual a la imagen que se guarda?

Ejemplo como sigue, facecolor = ‘gray’ para mayor claridad:

import matplotlib.pyplot as plt import numpy as np %matplotlib inline fig = plt.figure(figsize=(6,4),facecolor='gray') ax = fig.add_axes([0.1, 0.1, 0.8, 0.8]) x = np.linspace(0,2*np.pi,1000) y = np.sin(x) ax.plot(x,y,label=r'$\sin(x)$') ax.set_xlim(0,2*np.pi) ax.set_ylim(-1.2,1.2) ax.set_xlabel(r'$x$') ax.set_ylabel(r'$y$') ax.legend(loc='upper right', frameon=False) fig.savefig('mypath.png',dpi=300, facecolor='gray') plt.show() 

Tenga en cuenta que aquí he elegido explícitamente las dimensiones de mis ejes para que queden equidistantes de los dos lados de la imagen resultante. Esto se respeta en la imagen guardada, pero se ignora en la imagen que se muestra en el cuaderno:

Imagen mostrada del cuaderno:

Imagen visualizada del cuaderno

Guardar imagen de imagen:

introduzca la descripción de la imagen aquí

Como lo señaló @andrew, las magias de ipython bbox_inches='tight' de forma predeterminada. Esto puede ser anulado usando otras magias como se explica en la documentación de ipython :

 %matplotlib inline %config InlineBackend.print_figure_kwargs = {'bbox_inches':None} 

produce una imagen en línea idéntica a la producida por savefig.

El comportamiento se debe al hecho de que magic %matplotlib inline predeterminada el bbox_inches='tight' al renderizar en línea.

Sé que preguntaste sobre cambiar el comportamiento de plt.show() , pero alternativamente, puedes cambiar el comportamiento de savefig() para usar la misma configuración que notbeook.

 fig.savefig('mypath.png',dpi=300, facecolor='gray', bbox_inches='tight') 

Nueva imagen ‘savefig’:

introduzca la descripción de la imagen aquí