Ich möchte einige Änderungen an einigen ausgewählten Häkchen in einem Plot vornehmen.
Zum Beispiel, wenn ich:
label = axes.yaxis.get_major_ticks()[2].label
label.set_fontsize(size)
label.set_rotation('vertical')
Die Schriftgröße und die Ausrichtung des Häkchens werden geändert.
Wenn Sie jedoch Folgendes versuchen:
label.set_text('Foo')
Das Häkchen wird nicht geändert. Auch wenn ich das tue:
print label.get_text()
nichts wird gedruckt.
Hier ist noch etwas Seltsames. Als ich das versuchte:
from pylab import *
axes = figure().add_subplot(111)
t = arange(0.0, 2.0, 0.01)
s = sin(2*pi*t)
axes.plot(t, s)
for ticklabel in axes.get_xticklabels():
print ticklabel.get_text()
Es werden nur leere Zeichenfolgen gedruckt, aber das Diagramm enthält Häkchen mit den Bezeichnungen "0.0", "0.5", "1.0", "1.5" und "2.0".
python
matplotlib
repoman
quelle
quelle
draw()
bevor Sie versuchen, die Etiketten zu drucken, erhalten Sie das, was Sie erwarten. Das Festlegen einzelner Tick-Labels ist leider etwas schwieriger (was passiert, ist, dass der Tick-Locator und der Formatierer nicht zurückgesetzt wurden und Dinge überschreiben, wenn Sieset_text
). Ich werde gleich ein Beispiel hinzufügen, wenn mich jemand nicht schlägt. Im Moment muss ich allerdings den Bus nehmen.Antworten:
Vorsichtsmaßnahme: Sofern die Ticklabels nicht bereits auf eine Zeichenfolge festgelegt sind (wie dies normalerweise bei einem Boxplot der Fall ist), funktioniert dies mit keiner neueren Version von matplotlib als
1.1.0
. Wenn Sie vom aktuellen Github-Master aus arbeiten, funktioniert dies nicht. Ich bin mir noch nicht sicher, wo das Problem liegt ... Es kann eine unbeabsichtigte Änderung sein, oder es kann nicht sein ...Normalerweise würden Sie etwas in diese Richtung tun:
Um den Grund zu verstehen, warum Sie durch so viele Reifen springen müssen, müssen Sie etwas mehr darüber verstehen, wie matplotlib aufgebaut ist.
Matplotlib vermeidet absichtlich das "statische" Positionieren von Zecken usw., es sei denn, es wird ausdrücklich dazu aufgefordert. Die Annahme ist, dass Sie mit dem Plot interagieren möchten, sodass sich die Grenzen des Plots, der Ticks, der Ticklabels usw. dynamisch ändern.
Daher können Sie nicht einfach den Text eines bestimmten Häkchens festlegen. Standardmäßig wird es bei jedem Zeichnen des Diagramms durch den Locator und den Formatierer der Achse zurückgesetzt.
Wenn jedoch die Locators und Formatter gesetzt sind statisch zu sein (
FixedLocator
undFixedFormatter
sind), dann bleiben die Etiketten tick gleich.Das ist was
set_*ticklabels
oderax.*axis.set_ticklabels
tut.Hoffentlich wird dadurch etwas klarer, warum das Ändern eines einzelnen Tick-Labels etwas kompliziert ist.
Oft möchten Sie nur eine bestimmte Position mit Anmerkungen versehen. In diesem Fall schauen Sie
annotate
stattdessen in.quelle
bold
während andere das Schriftgewicht von "Licht" verwenden? Gibt es eine Möglichkeit, dies zu tun?fig.canvas.draw()
entscheidender Bedeutung istDies kann man auch mit Pylab und xticks machen
http://matplotlib.org/examples/ticks_and_spines/ticklabels_demo_rotation.html
quelle
matplotlib
Wenn Sie in neueren Versionen von die Tick-Beschriftungen nicht mit einer Reihe vonstr
Werten festlegen, sind sie''
standardmäßig (und wenn das Diagramm gezeichnet wird, sind die Beschriftungen einfach die Tick-Werte). Um dies zu erreichen, wäre Folgendes erforderlich, um die gewünschte Ausgabe zu erzielen:und das Ergebnis:
und jetzt, wenn Sie das überprüfen
_xticklabels
, sind sie nicht mehr ein Haufen von''
.Es funktioniert in den Versionen von
1.1.1rc1
bis zur aktuellen Version2.0
.quelle
set_xticklabels
eine gemischte Liste mit Zeichenfolgen und Häkchen an.ax.get_xticks().tolist()
). Die am häufigsten gewählte Lösung war nicht (ax.get_xtickslabels()
). Irgendwie war es nicht möglich, die Etiketten zu extrahieren, bevor das ausgeschnittenplt.show()
wurde, obwohl ich esfig.canvas.draw()
wie vorgeschlagen verwendet habe.Es ist schon eine Weile her, seit diese Frage gestellt wurde. Ab heute (
matplotlib 2.2.2
) und nach einigen Lektüren und Versuchen denke ich, dass der beste / richtige Weg der folgende ist:Matplotlib hat einen Modul mit dem Namen ,
ticker
dass „enthält Klassen zur Unterstützung vollständig konfigurierbar tick Ortung und Formatierung“ . Um einen bestimmten Tick aus dem Plot zu ändern, funktioniert Folgendes für mich:Vorbehalt!
x
ist der Wert des Häkchens undpos
seine relative Position in der Reihenfolge in der Achse. Beachten Sie, dasspos
Werte beginnend mit1
und nicht0
wie üblich bei der Indizierung verwendet werden.In meinem Fall habe ich versucht, das
y-axis
eines Histogramms mit Prozentwerten zu formatieren .mticker
hat eine andere Klasse namensPercentFormatter
, die dies einfach tun kann, ohne wie zuvor eine separate Funktion definieren zu müssen:In diesem Fall
xmax
ist der Datenwert 100%. Prozentsätze werden berechnet alsx / xmax * 100
, deshalb korrigieren wirxmax=1.0
. Außerdemdecimals
wird die Anzahl der Dezimalstellen nach dem Punkt angegeben.quelle
Die Achsenklasse hat eine Achsenklasse Funktion set_yticklabels , mit der Sie die Tick-Beschriftungen wie folgt festlegen können:
Ich arbeite immer noch daran, warum Ihr Beispiel oben nicht funktioniert hat.
quelle
Das funktioniert:
quelle
Dies funktioniert auch in Matplotlib 3:
quelle
Wenn Sie nicht mit
fig
und arbeitenax
und alle Beschriftungen ändern möchten (z. B. zur Normalisierung), können Sie dies tun:quelle
Versuche dies :
quelle
du kannst tun:
quelle