Ich habe Probleme, mit meinen Handlungsrändern in Matplotlib umzugehen. Ich habe den folgenden Code verwendet, um mein Diagramm zu erstellen:
plt.imshow(g)
c = plt.colorbar()
c.set_label("Number of Slabs")
plt.savefig("OutputToUse.png")
Ich erhalte jedoch eine Ausgabezahl mit viel Leerraum auf beiden Seiten des Diagramms. Ich habe bei Google gesucht und die matplotlib-Dokumentation gelesen, aber ich kann anscheinend nicht herausfinden, wie ich dies reduzieren kann.
python
matplotlib
robintw
quelle
quelle
extent
derimshow
Figur oder die Menge der Grenze Leerzeichen in der resultierenden png, um die Figur, die durchsavefig
?savefig
- das ist es, was ich sortieren möchte.Antworten:
Eine Möglichkeit, dies automatisch zu tun, ist das
bbox_inches='tight'
kwarg toplt.savefig
.Z.B
Ein anderer Weg ist zu verwenden
fig.tight_layout()
quelle
fig.savefig()
. (plt.savefig()
wird in diesem Fall nicht funktionieren.)fig.tight_layout()
. Diese Funktion gab es nicht, als diese Antwort ursprünglich geschrieben wurde, sonst würde ich sie stärker erwähnen.fig = plt.gcf()
Sie können den Abstand um matplotlib-Figuren mit der Funktion subplots_adjust () anpassen:
Dies funktioniert sowohl für die Figur auf dem Bildschirm als auch für das Speichern in einer Datei. Es ist die richtige Funktion, die Sie aufrufen können, auch wenn Sie nicht mehrere Diagramme auf einer Figur haben.
Die Zahlen sind Bruchteile der Figurenabmessungen und müssen angepasst werden, um die Figurenbeschriftungen zu berücksichtigen.
quelle
GridSpec
Objekten durch Aufrufen derupdate
Methode (siehe stackoverflow.com/a/20058199/1030876 ).Alles was Sie brauchen ist
vor Ihrer Ausgabe.
Dies reduziert nicht nur die Ränder, sondern gruppiert auch den Abstand zwischen den Nebenplots eng:
quelle
bbox_inches='tight'
, wodurch nur der weiße Raum um die Ränder abgeschnitten wird, das Diagramm jedoch in Ruhe gelassen wird. Ich habe die Figur mit erstelltplt.figure(figsize=(10,3))
.Verwenden
ax = fig.add_axes([left, bottom, width, height])
Sie diese Option nur, wenn Sie das Figurenlayout genau steuern möchten. z.B.quelle
Falls sich jemand fragt, wie der Rest des weißen Randes nach dem Anwenden entfernt werden kann
plt.tight_layout()
oderfig.tight_layout()
: Mit dem Parameterpad
(der1.08
standardmäßig aktiviert ist) können Sie ihn noch enger machen: "Auffüllen zwischen der Figurenkante und den Kanten von Nebenhandlungen als Bruchteil der Schriftgröße. " So zum Beispielwird es auf einen sehr kleinen Spielraum reduzieren. Das Putten
0
funktioniert bei mir nicht, da dadurch auch die Box der Nebenhandlung ein wenig abgeschnitten wird.quelle
quelle
savefig
Funktion ist elegant, der negative Wert fürpad_inches
wird jedoch nicht unbedingt in jedem Fall benötigt.Das Problem mit matplotlibs subplots_adjust besteht darin, dass die von Ihnen eingegebenen Werte relativ zur x- und y-Größe der Abbildung sind. Dieses Beispiel dient zur korrekten Abbildung für den Druck eines PDF-Dokuments:
Dafür berechne ich den relativen Abstand zu absoluten Werten wie folgt neu:
für eine Zahl von 'figure.xsize' Zoll in x-Dimension und 'figure.ysize' Zoll in y-Dimension. Die ganze Figur hat also einen linken Rand von 5 mm, einen unteren Rand von 4 mm, einen rechten von 1 mm und einen oberen von 3 mm innerhalb der Etiketten. Die Konvertierung von (x / 25.4) erfolgt, weil ich mm in Zoll konvertieren musste.
Beachten Sie, dass die reine Diagrammgröße von x "figure.xsize - linker Rand - rechter Rand" und die reine Diagrammgröße von y "figure.ysize - unterer Rand - oberer Rand" in Zoll ist
Andere Sniplets (nicht sicher, ich wollte nur die anderen Parameter angeben)
und
quelle
xsize
undysize
aus. Ich benutze diese Eigenschaften und bekommeAttributeError: 'Figure' object has no attribute 'xsize'
inspiriert von Sammys Antwort oben:
Wo figsize ist das Tupel, in dem Sie verwendet haben
fig = pyplot.figure(figsize=...)
quelle
Für mich haben die obigen Antworten unter
matplotlib.__version__ = 1.4.3
Win7 nicht funktioniert . Wenn wir uns also nur für das Bild selbst interessieren (dh wenn wir keine Anmerkungen, Achsen, Häkchen, Titel, ylabel usw. benötigen), ist es besser, das numpy-Array einfach als Bild zu speichernsavefig
.Mit opencv-Zeichenfunktionen (cv2.line, cv2.polylines) können wir auch einige Zeichnungen direkt auf dem numpy-Array erstellen. http://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html
quelle
In neueren matplotlib-Versionen möchten Sie möglicherweise Constrained Layout ausprobieren .
quelle