Plt.show pokazuje pełny wykres, ale savefig przycina obraz

87

Mój kod z powodzeniem zapisuje obrazy do pliku, ale przycina ważne szczegóły z prawej strony. Istnieją odpowiedzi umożliwiające rozwiązanie tego problemu w przypadku, gdy występuje on plt.show, ale to savefigpolecenie nieprawidłowo generuje wykres w tym przykładzie. Jak to może zostać naprawione?

Odpowiednia próbka mojego kodu:

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

A obrazy (góra to, plt.showa dół to plik utworzony z savefig:

Obraz pokazany z plt.show Obraz po zapisaniu do pliku


Joss Kirk
źródło
Czy możesz podać prosty przykład, który inni mogą przetestować, najlepiej bez konieczności pobierania dodatkowych danych i pakietów?
Neapolitański
1
@Neapolitan. To trochę wykracza poza moje umiejętności. Odpowiedź udzielona poniżej sugeruje, że istnieje ogólne rozwiązanie tego problemu, niezależne od danych.
Joss Kirk
@Neopolitan Nie wiem, jak powstał problem, więc nie jestem pewien, jak stworzyć prostsze dane, które mogłyby je powielić.
Joss Kirk

Odpowiedzi:

164

Możesz spróbować

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

Lub możesz zdefiniować rozmiar figury, jak

fig = plt.figure(figsize=(9, 11))
...
plt.savefig(filename, bbox_inches = 'tight')
Spokój
źródło
Dziękuję za odpowiedź, jutro ją wdrożę i dam znać!
Joss Kirk
4
Zaimplementowałem pierwszą odpowiedź i zadziałało! Dziękuję Ci!
Joss Kirk
2
To musi być opcja domyślna, bbox_inches = 'tight'. Użyłem go w połączeniu z wysoką wartością dpi i działał cudownie dobrze.
Deepak V