Plt.show zeigt das vollständige Diagramm, aber savefig schneidet das Bild zu

82

Mein Code speichert erfolgreich Bilder in einer Datei, schneidet jedoch wichtige Details auf der rechten Seite ab. Es gibt Antworten , um dieses Problem zu beheben, wenn es auftritt plt.show, aber es ist der savefigBefehl, der das Diagramm in diesem Beispiel falsch erzeugt. Wie kann das behoben werden?

Das relevante Beispiel meines Codes:

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

Und die Bilder (oben ist plt.showund unten ist Datei erstellt aus savefig:

Bild bei Anzeige mit plt.show Bild beim Speichern in Datei


Joss Kirk
quelle
Können Sie ein einfaches Beispiel geben, das andere testen können, vorzugsweise ohne zusätzliche Daten und Pakete herunterladen zu müssen?
Neapolitaner
1
@Neapolitanisch. Das geht etwas über meine Fähigkeiten hinaus. Die unten stehende Antwort legt nahe, dass es für dieses Problem unabhängig von den Daten eine generische Lösung gibt.
Joss Kirk
@Neopolitan Ich weiß nicht, wie das Problem aufgetreten ist, daher bin ich mir nicht sicher, wie ich einfachere Daten erstellen kann, die es replizieren könnten.
Joss Kirk

Antworten:

156

Sie können es versuchen

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

Oder Sie definieren die Figurengröße wie

fig = plt.figure(figsize=(9, 11))
...
plt.savefig(filename, bbox_inches = 'tight')
Gelassenheit
quelle
Vielen Dank für Ihre Antwort, ich werde sie morgen umsetzen und Sie wissen lassen, wie es geht!
Joss Kirk
3
Ich habe die erste Antwort implementiert und es hat funktioniert! Vielen Dank!
Joss Kirk
1
Dies muss die Standardoption sein, bbox_inches = 'tight'. Ich habe es in Verbindung mit einem hohen dpi-Wert verwendet und es hat wunderbar funktioniert.
Deepak V