Matplotlib: Erste Geschichten zu füllen Abbildung
Ich würde bitte gerne Vorschläge, wie überschreiben des Standard-matplotlib Verhalten beim Plotten Bilder als Nebenhandlungen, wobei die Teilfläche Größen scheinen nicht zu entsprechen, die Abbildung Größe. Ich würde gerne meine Figur Größe (z.B. entsprechend der Breite einer A4-Seite) und haben die Nebenhandlungen automatisch dehnen und füllen den verfügbaren Platz. Im folgenden Beispiel wird der folgende code gibt ein Bild mit viel weißem Raum zwischen den Platten:
import numpy as np
import matplotlib.pyplot as plt
data=np.random.rand(10,4)
#creating a wide figure with 2 subplots in 1 row
fig,ax=plt.subplots(1,2, figsize=(9,3))
ax=ax.reshape(1,len(ax))
for i in [0,1]:
plt.sca(ax[0,i])
plt.imshow(data,interpolation='nearest')
plt.colorbar()
Möchte ich die Nebenhandlungen werden horizontal gestreckt, so dass Sie füllen die Abbildung Raum. Ich mache viele ähnliche plots mit unterschiedlicher Zahl von Werten entlang jeder Achse, und der Abstand zwischen den plots angezeigt wird, hängt von dem Verhältnis der x-Werte, y-Werte, also ich würde bitte gerne wissen, ob es eine gute Allgemeine Art der Nebenhandlung breiten, um den Raum zu füllen. Kann die physikalische Größe der subplots angegeben werden irgendwie? Ich habe die Suche nach Lösungen für ein paar Stunden, also vielen Dank im Voraus für jede Hilfe, die Sie geben können.
InformationsquelleAutor PeterW | 2014-07-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersten sind, verwenden Sie Anrufe zu
plt
wenn SieAxes
Objekte als Ihre Entsorgung. Diese Straße führt zu Schmerzen. Zweitensimshow
legt das Seitenverhältnis der Achsen auf 1. Das ist, warum die Achsen sind so schmal. Wissen alle, dass Ihr Beispiel wird zu:Auf meinem system, dass wie folgt aussieht:
InformationsquelleAutor Paul H
Stellen Sie bei Ihrem axis-Bereich mithilfe der
ax.set_position
Methode. Es arbeitet mit relativen Koordinaten, also, wenn Sie wollen, um ein A4-Bild, dann:Nun die Achse-Gebiet (Grundstücksfläche) füllt die ganze Seite.
Die Koordinaten der
set_position
sind relative Koordinaten [Links, unten, Breite, Höhe], wo jede Richtung skaliert durch die Größe der Seite.Wie schon in den anderen Antworten
imshow
undmatshow
mal versuchen zu halten, werden die Pixel in das Bild quadratisch. Es ist ein ganz besonderes zusammenspiel mit den axis-Verhältnis undimshow
.imshow
aufgerufen, ohneextent=[...]
oderaspect='auto'
keyword-Argumente, es tut, was wird angewiesen, in der lokalen Standardwerte, in der Regel versucht die Pixel im Quadrataspect='equal'
gesetzt ist), die Achsen zu handeln, als obplt.axis('scaled')
berufen worden, also hält die X-und Y-Koordinaten gleich der Länge (in Pixel pro Einheit) und ändern der Achse der Größe entsprechen Sie die Blöckeplt.axis('tight')
(das macht die x-und y-Grenzen passt das Bild genau)Th Alter trick ist die Verwendung
axis('auto')
oderaxis('normal')
, aber diese sind heute veraltet (verwenden Siescaled
,equal
odertight
).Ja, es ist ein bisschen ein Durcheinander.
Sie könnten versuchen dabei die set_position als hier angegeben, aber anstatt dann mit der pyplot Befehl, verwenden Sie die direkte Objekt-Schnittstelle (
ax.imshow(...)
eher alsplt.imshow(...)
)Sie haben einige Lösungen hingewiesen, aber ich habe ein paar Kommentare auf dieser.
imshow
ist ein bisschen komisch, in diesem Sinne.plt.gca().set_position([0, 0, 1, 1])
war genau das, was ich brauchte, um Grundstücke von Satellitenbildern mit.imshow()
mit Cartopy zu füllen, die gesamte Figur. Für meinen Gebrauch Fallplt.axis('tight')
gemacht, es zeigt die gesamte Projektion des Globus, das war nicht das, was ich suchte. Vielen Dank für die sehr hilfreiche Antwort!InformationsquelleAutor DrV
Einen Freund kam mit einer Lösung, die zu funktionieren scheint einigermaßen gut, von denen ich dachte, ich würde post für jemand mit einem ähnlichen problem - Einstellung aspect='auto' in imshow scheint, den trick zu tun, für jede Wahl von nx, figsize, nplots_hori und nplots_vert unten.
InformationsquelleAutor PeterW