Guardar gráfica completa utilizando matplotlib en Python

publicado por: Anonymous

Al intentar guardar una gráfica generada a partir de una serie de puntos, la imagen generada me sale cortada, es decir, aparece por ejemplo solo una parte de la denominación de los ejes. ¿Alguien sabe como ajustar esto? El código sería aproximadamente el siguiente:

f, ax = plt.subplots(figsize=(10, 10))
plt.rc('font', size = 7)
corr = df1_number.corr()
sb.heatmap(corr, mask=np.zeros_like(corr, dtype=np.bool), 
cmap=sb.diverging_palette(220, 10, as_cmap=True),square=True, ax=ax)
plt.savefig("Correlaciones Pearson.jpg")

solución

Puedes usar el argumento opcional de bbox_inches que permite especificar que porción de la figura ha de ser guardada. Si se pasa 'tight' al argumento se extiende o reduce el área de la figura guardada para incluir a todos los componentes de ella, eliminado también los espacios blancos sobrantes en los bordes.

Es decir, deberías usar:

plt.savefig("Correlaciones Pearson.jpg", bbox_inches='tight')

Un ejemplo reproducible:

import numpy as np
import matplotlib
import matplotlib.pyplot as plt

matplotlib.rcParams.update({'font.size': 21})
ax = plt.gca()

ax2 = ax.twinx()
for i in range(10):
    ax.bar(i, np.random.randint(1000))

plt.ylabel('Datos')
plt.savefig("Ejemplo1.jpg")

Esto nos va a guardar algo como:

introducir la descripción de la imagen aquí

¿Y la etiqueta?

Si usamos:

plt.savefig("Ejemplo.jpg", bbox_inches='tight')

obtenemos lo que queremos:

introducir la descripción de la imagen aquí


show nos puede producir el mismo problema. Aunque redimensionado la ventana podemos llegar a verlo todo, en este caso llamar previamente a plt.tight_layout()/figure.tight_layout() lo resulve.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *