Matplotlib y Ipython-notebook: mostrar exactamente la figura que se guardarĂ¡
jupyter-notebook (2)
Como señaló @andrew, las magias de ipython están aplicando
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.
Estoy usando ipython-notebook mucho 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 verificarlo.
¿Hay alguna manera de hacer que la imagen que se muestra en línea sea la misma que la imagen que se guarda?
Ejemplo como sigue, facecolor = ''grey'' 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 sean 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:
Guardar imagen de la figura:
El comportamiento se debe al hecho de que la magia
%matplotlib inline
defecto usa
bbox_inches=''tight''
cuando se
bbox_inches=''tight''
en línea.
Sé que preguntaste sobre cambiar el comportamiento de
plt.show()
, pero también 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'':