Ich kann nicht herausfinden, wie ich den Text auf der X-Achse drehen kann. Es ist ein Zeitstempel, dh wenn die Anzahl der Samples zunimmt, kommen sie näher und näher, bis sie sich überlappen. Ich möchte den Text um 90 Grad drehen, damit sich die Muster nicht überlappen, wenn sie näher zusammenrücken.
Unten ist, was ich habe, es funktioniert gut, mit der Ausnahme, dass ich nicht herausfinden kann, wie man den Text der X-Achse dreht.
import sys
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import datetime
font = {'family' : 'normal',
'weight' : 'bold',
'size' : 8}
matplotlib.rc('font', **font)
values = open('stats.csv', 'r').readlines()
time = [datetime.datetime.fromtimestamp(float(i.split(',')[0].strip())) for i in values[1:]]
delay = [float(i.split(',')[1].strip()) for i in values[1:]]
plt.plot(time, delay)
plt.grid(b='on')
plt.savefig('test.png')
Das funktioniert bei mir:
plt.xticks(rotation=90)
aufstehen8
Viele “richtige” Antworten hier, aber ich werde noch eine hinzufügen, da ich denke, dass einige Details von mehreren weggelassen werden. Das OP hat nach einer 90-Grad-Drehung gefragt, aber ich werde auf 45 Grad wechseln, denn wenn Sie einen Winkel verwenden, der nicht null oder 90 ist, sollten Sie auch die horizontale Ausrichtung ändern. Andernfalls werden Ihre Beschriftungen außermittig und etwas irreführend sein (und ich vermute, dass viele Leute, die hierher kommen, die Achsen auf etwas anderes als 90 drehen möchten).
Einfachster / Geringster Code
Option 1
plt.xticks(rotation=45, ha="right")
Wie bereits erwähnt, ist dies möglicherweise nicht wünschenswert, wenn Sie lieber den objektorientierten Ansatz wählen.
Option 2
Ein weiterer schneller Weg (es ist für Datumsobjekte gedacht, scheint aber auf jedem Etikett zu funktionieren; bezweifle jedoch, dass dies empfohlen wird):
Wenn Sie die Liste der Beschriftungen aus dem aktuellen Diagramm abrufen möchten:
# Unfortunately you need to draw your figure first to assign the labels,
# otherwise get_xticklabels() will return empty strings.
plt.draw()
ax.set_xticks(ax.get_xticks())
ax.set_xticklabels(ax.get_xticklabels(), rotation=45, ha="right")
Wie oben können Sie in späteren Versionen von Matplotlib (3.5+) einfach verwenden set_xticks allein:
Diese Option ist einfach, aber AFAIK können Sie die horizontale Ausrichtung des Etiketts nicht auf diese Weise festlegen, sodass eine andere Option möglicherweise besser ist, wenn Ihr Winkel nicht 90 beträgt.
Als hier beschriebengibt es eine vorhandene Methode in der matplotlib.pyplotfigure Klasse, die Daten automatisch entsprechend Ihrer Figur rotiert.
Sie können es aufrufen, nachdem Sie Ihre Daten gezeichnet haben (dhax.plot(dates,ydata) :
fig.autofmt_xdate()
Wenn Sie die Etiketten weiter formatieren müssen, sehen Sie sich den obigen Link an.
Nicht-datetime-Objekte
Gem languitar‘s Kommentar, die Methode, die ich für non-datetime vorgeschlagen habe xticks würde beim Zoomen etc. nicht richtig aktualisieren. Wenn es nicht a datetime Objekt, das als Ihre x-Achsendaten verwendet wird, sollten Sie folgen Tommys antwort:
for tick in ax.get_xticklabels():
tick.set_rotation(45)
opiethehokie
Versuchen Sie es mit pyplot.setp. Ich denke, du könntest so etwas tun:
Dies ist nützlich, wenn Sie ein Array von Achsen haben, das von zurückgegeben wird plt.subplotsund es ist bequemer als die Verwendung set_xticks denn in diesem Fall müssen Sie auch die Tick-Labels setzen, und auch bequemer als diejenigen, die über die Ticks iterieren (aus offensichtlichen Gründen)
14489800cookie-checkAchsentext in Matplotlib drehenyes