Plt.show muestra un gráfico completo pero savefig está recortando la imagen

82

Mi código guarda imágenes en un archivo con éxito, pero está recortando detalles importantes del lado derecho. Existen respuestas para solucionar este problema cuando surja plt.show, pero es el savefigcomando el que está produciendo incorrectamente el gráfico en este ejemplo. ¿Cómo se puede arreglar esto?

La muestra relevante de mi código:

import glob
import os
for file in glob.glob("*.oax"):
    try:
        spc_file = open(file, 'r').read()
        newName = file[6:8] + '-' + file[4:6] + '-' + file[0:4] + ' ' + file[8:12] +  ' UTC (Observed) - No Sea Breeze Day'
        plt.title(newName, fontsize=12, loc='left')
        plt.savefig('X:/' + newName + '.png')        
        plt.show()
    except Exception:
        pass

Y las imágenes (la parte superior es plt.showy la parte inferior es un archivo producido a partir de savefig:

Imagen cuando se muestra con plt.show Imagen cuando se guarda en un archivo


Joss Kirk
fuente
¿Puede dar un ejemplo simple que otros puedan probar, preferiblemente sin tener que descargar datos y paquetes adicionales?
Napolitano
1
@Napolitano. Eso está un poco más allá de mis habilidades. La respuesta proporcionada a continuación sugiere que existe una solución genérica para este problema, independiente de los datos.
Joss Kirk
@Neopolitan No sé cómo ha surgido el problema, así que no estoy seguro de cómo producir datos más simples que puedan replicarlo.
Joss Kirk

Respuestas:

156

Puedes intentar

plt.savefig('X:/' + newName + '.png', bbox_inches='tight')

O puede definir el tamaño de la figura como

fig = plt.figure(figsize=(9, 11))
...
plt.savefig(filename, bbox_inches = 'tight')
Serenidad
fuente
Gracias por tu respuesta, lo implementaré mañana y te haré saber cómo va!
Joss Kirk
3
¡Implementé la primera respuesta y funcionó! ¡Gracias!
Joss Kirk
1
Esta tiene que ser la opción predeterminada, bbox_inches = 'tight'. Lo usé junto con un alto valor de dpi y funcionó maravillosamente bien.
Deepak V