Matplotlib: Die finalen Figurenbemaßungen stimmen mit figsize mit savefig () und bbox_extra_artists überein

9

Ich produziere Grafiken für die Veröffentlichung mit Matplotlib und möchte eine sehr genaue Zahlenausgabe. Ich brauche das, damit ich sicher sein kann, dass die Größe der Figur nicht geändert werden muss, wenn sie in das Latexdokument eingefügt wird, was mit der Schriftgröße in der Figur verwechselt werden würde, die ich in einem konsistenten Verhältnis zur Schriftgröße halten möchte Hauptdokument.

Ich muss das Argument bbox_extra_artists für savefig verwenden, weil ich unten eine Legende habe, die die Zahl abschneidet, wenn ich es nicht tue. Das Problem, das ich habe, ist, dass ich keinen Weg gefunden habe, die ursprünglichen Figurdimensionen zu erhalten, die ich mit figsize anlege, wenn ich das nach dem Aufruf von savefig mit bbox_extra_artists geehrte Plot erstelle.

Mein Aufruf an savefig sieht so aus:

%Vor%

Die mit figsize angegebene Zahlenbreite ist:

%Vor%

Die Ausgabe-PDF-Breite, die ich mit meinem savefig() -Aufruf erhalten habe, ist 171 millimeters (nicht die gewünschten 181,3532 mm).

Die Lösung, die ich in anderen Fragen hier auf SO vorgeschlagen habe, ist einen Aufruf an tight_layout() . Also setze ich unmittelbar über meinem savefig() -Aufruf folgendes:

%Vor%

Dies ergibt eine Figur mit der Breite 183 millimeters (wiederum nicht die 181.3532 Millimeter, die ich haben möchte). Wenn ich tight_layout verwende und das Argument bbox_extra_artists von meinem Aufruf an savefig() lösche, bekomme ich eine Breite von 190 millimeters (wiederum nicht 181.3532 Millimeter, die ich haben möchte). Dies ist neben dem Punkt, dass Entfernen von bbox_extra_artists in meinem Fall die Figur durch Abschneiden von Sachen. Mangels

Also ich denke, das ist eine zweiteilige Frage:

  • Wenn% tight_layout auch ohne bbox_extra_artists verwendet wird, warum ist die Ausgabezahl falsch bemessen?
  • Gibt es einen beliebigen Weg, um eine korrekte Größe zu erhalten, wenn Sie bbox_extra_artists ?
  • benutzen?

Ich weiß ein paar Millimeter klingt wie ein trivialer Unterschied, aber es ist die Tatsache, dass es überhaupt einen Unterschied gibt, der mich betrifft. Es bedeutet, dass es eine Variable gibt, die sich in meinen anderen Figuren ändern kann, was zu einem gewissen Grad an Fehlern führt, und dieser Fehler kann möglicherweise an anderer Stelle vergrößert werden.

    
Bryce Thomas 20.04.2013, 08:29
quelle

1 Antwort

6

Der Grund dafür, dass Sie ein kleineres Diagramm erhalten, ist, dass Sie bbox_inches='tight' angeben.

bbox_inches='tight' schneidet das Diagramm basierend auf den Ausmaßen der Künstler im Diagramm ab. Wenn Sie möchten, dass die Ausgabe genau der von Ihnen angegebenen Größe entspricht, lassen Sie die bbox_inches und bbox_extra_artists kwargs ganz weg.

Wenn Sie einfach savefig(output_file, dpi=72.72) ohne etwas anderes eingeben, entspricht das Diagramm genau der Größe, die Sie beim Erstellen der Figur angegeben haben.

    
Joe Kington 20.04.2013 21:44
quelle

Tags und Links