Ich kann nicht erreichen, dass die Farbleiste in Imshow-Diagrammen wie diesem die gleiche Höhe wie das Diagramm hat, ohne dass Photoshop nachträglich verwendet wird. Wie bekomme ich die passenden Höhen?
python
image
matplotlib
Elliot
quelle
quelle
fraction
odershrink
args.Antworten:
Sie können dies einfach mit einem matplotlib AxisDivider tun .
Das Beispiel auf der verlinkten Seite funktioniert auch ohne Verwendung von Nebenhandlungen:
quelle
plt.title
, wird dieser nach rechts vertauscht angezeigt. Gibt es eine Möglichkeit, dies zu überwinden?Diese Kombination (und Werte in der Nähe dieser Werte) scheint für mich "magisch" zu funktionieren, um die Farbleiste auf das Diagramm skaliert zu halten, unabhängig von der Größe der Anzeige.
Es ist auch nicht erforderlich, die Achse zu teilen, wodurch das Diagramm aus dem Quadrat geraten kann.
quelle
im_ratio = data.shape[0]/data.shape[1]
plt.colorbar(im,fraction=0.046*im_ratio, pad=0.04)
Wodata
ist Ihr Bild ?@bogatron gab bereits die Antwort, die von den matplotlib-Dokumenten vorgeschlagen wurde , wodurch die richtige Höhe erzeugt wird, aber es kommt zu einem anderen Problem. Jetzt ändert sich die Breite der Farbleiste (sowie der Abstand zwischen Farbleiste und Plot) mit der Breite des Plots. Mit anderen Worten, das Seitenverhältnis der Farbleiste ist nicht mehr festgelegt.
Um sowohl die richtige Höhe als auch ein bestimmtes Seitenverhältnis zu erhalten, müssen Sie etwas tiefer in das mysteriöse
axes_grid1
Modul eintauchen.Beachten Sie, dass dies die Breite des Farbbalkens in Bezug auf die Höhe des Diagramms angibt (im Gegensatz zur Breite der Abbildung wie zuvor).
Der Abstand zwischen Farbbalken und Plot kann jetzt als Bruchteil der Breite des Farbbalkens angegeben werden, was meiner Meinung nach eine viel aussagekräftigere Zahl ist als ein Bruchteil der Figurenbreite.
AKTUALISIEREN:
Ich habe ein IPython-Notizbuch zu diesem Thema erstellt , in dem ich den obigen Code in eine leicht wiederverwendbare Funktion gepackt habe:
Es kann folgendermaßen verwendet werden:
quelle
Ich schätze alle obigen Antworten. Jedoch, wie einige Antworten und Kommentare darauf hingewiesen, das
axes_grid1
kann Modul nicht - Adresse GeoAxes, während Einstellungfraction
,pad
,shrink
und andere ähnliche Parameter nicht unbedingt gibt die sehr präzise Ordnung, die wirklich stört mich. Ich glaube, dass es eine bessere Lösungcolorbar
seinaxes
könnte , das Eigene zu geben, um alle genannten Probleme anzugehen.Code
Ergebnis
Später finde ich, dass die
matplotlib.pyplot.colorbar
offizielle Dokumentation auchax
Optionen bietet , bei denen es sich um vorhandene Achsen handelt, die Platz für die Farbleiste bieten. Daher ist es nützlich für mehrere Unterzeichnungen, siehe unten.Code
Ergebnis
Auch hier können Sie ähnliche Effekte erzielen, indem Sie cax angeben, was aus meiner Sicht genauer ist.
Code
Ergebnis
quelle
Wenn Sie den
colorbar
Versuch mit den Bruch- und / oder Verkleinerungsparametern erstellen .Aus den Dokumenten:
quelle
colorbar()
Funktion oder Methode sein.Alle oben genannten Lösungen sind gut, aber ich mag @ Steve's und @ bejota's am besten, da sie keine ausgefallenen Anrufe beinhalten und universell sind.
Mit universell meine ich, dass es mit jeder Art von Achsen funktioniert, einschließlich
GeoAxes
. Sie haben beispielsweise Achsen für die Zuordnung projiziert:ein Anruf bei
wird scheitern mit:
KeyException: map_projection
Daher ist die einzige universelle Möglichkeit, die Farbbalkengröße mit allen Arten von Achsen zu behandeln, folgende:
Arbeiten Sie mit einem Bruchteil von 0,035 bis 0,046, um die beste Größe zu erhalten. Die Werte für Bruch und Paddig müssen jedoch angepasst werden, um die beste Anpassung für Ihr Diagramm zu erzielen. Sie unterscheiden sich je nachdem, ob die Ausrichtung der Farbleiste vertikal oder horizontal ist.
quelle
shrink
Parameter hinzufügen , wennfraction
zusammen mitpad
nicht genügend gewünschte Ergebnisse erzielt werden.