Wie verschiebe ich das Label eines Ticks in Matplotlib?
Ich würde gerne verschieben Sie einige Zecken " Etiketten horizontal entlang der x-Achse, ohne die entsprechenden Zecken.
Genauer gesagt, beim drehen Etiketten mit plt.setp
den Zentren des labels' text ausgerichtet bleiben mit den Zecken. Ich möchte zu verschieben, diese Etiketten auf der rechten Seite, so dass die in der Nähe enden der Etiketten erhalten ausgerichtet statt wie vorgeschlagen auf dem Bild unten.
Ich bin mir bewusst, dieser Beitrag und diese eineaber die Antworten sind
interessant kludges eher als strenge Antworten auf die Frage.
mein code:
import matplotlib.pyplot as plt
import numpy as np
import datetime
# my fake data
dates = np.array([datetime.datetime(2000,1,1) + datetime.timedelta(days=i) for i in range(365*5)])
data = np.sin(np.arange(365*5)/365.0*2*np.pi - 0.25*np.pi) + np.random.rand(365*5) /3
# creates fig with 2 subplots
fig = plt.figure(figsize=(10.0, 6.0))
ax = plt.subplot2grid((2,1), (0, 0))
ax2 = plt.subplot2grid((2,1), (1, 0))
## plot dates
ax2.plot_date( dates, data )
# rotates labels
plt.setp( ax2.xaxis.get_majorticklabels(), rotation=-45 )
# try to shift labels to the right
ax2.xaxis.get_majorticklabels()[2].set_y(-.1)
ax2.xaxis.get_majorticklabels()[2].set_x(10**99)
plt.show()
Komischerweise set_y
verhält sich wie erwartet, aber auch wenn ich x
zu einem fantasillion, die labels würden sich nicht bewegen, durch einen Funken.
(Die Verwendung von plot_date
einführen können zusätzliche Verwirrung, aber das gleiche passiert eigentlich mit plot
.)
InformationsquelleAutor der Frage snake_charmer | 2015-02-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zuerst von allen, lassen Sie uns ein mcve um das problem anzuzeigen.
Nun wie andere anwers wies darauf hin, bereits, können Sie verwenden Sie die horizontale Ausrichtung des Textes.
Können Sie die
rotation_mode
argument lassen die Drehung geschieht über den oberen linken Punkt des Textes, wodurch ein etwas schöneres Ergebnis in diesem Fall.Im Falle, dass diese Optionen sind nicht fein genarbtem genug, d.h. Sie wollen die position der Etiketten genauer, z.B. verschieben auf die Seite, indem einige Punkte, die Sie möglicherweise verwenden Sie ein transform. Die folgenden offset der Bezeichnung durch 5 Punkte in horizontaler Richtung, mit einem
matplotlib.transforms.ScaledTranslation
.Der Vorteil dieser, im Vergleich zu z.B. die Lösung von @explorerDude ist, dass der offset ist unabhängig auf die Daten in den Graphen, so dass es in der Regel für jedes Grundstück und würden gleich Aussehen für einen bestimmten Schriftgrad.
InformationsquelleAutor der Antwort ImportanceOfBeingErnest
Statt
verwenden Sie die
set_horizontalalignment()
für jeden Teilstrich auf der Achse:ergibt:
InformationsquelleAutor der Antwort MattDMo
Fand ich einen Weg, die Verlagerung der hilfsstrichbeschriftungen der x-Achse durch einen beliebigen und dem genauen Betrag, aber auf diese Weise läuft gefährlich nahe an den steilen und rutschigen Felsen hoch über dem Meer des Wahnsinns. Also nur die sehr mutig oder verzweifelt sein sollte, Lesen Sie auf...
Dass gesagt wird, das problem ist, dass die x-position der Etiketten festgelegt, wenn die Zeichnung gerendert wird (ich habe nicht geschaut in den Teil des Codes, aber das ist mein Verständnis). Also alles, was Sie tun, mit set_x() überschrieben wird später. Allerdings gibt es einen Weg darum herum: man kann monkey patch set_x für bestimmte ticks, so dass die Etiketten werden nicht gezogen, wo die renderer zeichnen möchte Ihnen:
Hierzu können Sie selektiv nur für die Etiketten, die Sie verschieben möchten, und Sie können natürlich auch eine andere Verschiebung für jedes label.
Wenn jemand weiß, wie dies zu tun auf einem niedrigeren Wahnsinns Niveau, wäre ich sehr daran interessiert...
InformationsquelleAutor der Antwort explorerDude
Andere Art und Weise zu tun, eine horizontale Ausrichtung:
InformationsquelleAutor der Antwort scottlittle