Ich kann nicht herausfinden, wie der Text auf der X-Achse gedreht werden soll. Es ist ein Zeitstempel, so dass sie mit zunehmender Anzahl von Proben immer näher kommen, bis sie sich überlappen. Ich möchte den Text um 90 Grad drehen, damit sich die Samples nicht überlappen, wenn sie näher zusammenrücken.
Unten ist das, was ich habe. Es funktioniert einwandfrei, mit der Ausnahme, dass ich nicht herausfinden kann, wie der Text der X-Achse gedreht werden soll.
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')
python
matplotlib
tMC
quelle
quelle
ha
(horizontale Ausrichtung)Antworten:
Das funktioniert bei mir:
quelle
ax.plot(...)
plt.xticks(rotation=90)
Einfacher Weg
Wie hier beschrieben , gibt es in der
matplotlib.pyplot
figure
Klasse eine vorhandene Methode, mit der Datumsangaben automatisch entsprechend Ihrer Figur gedreht werden.Sie können es aufrufen, nachdem Sie Ihre Daten geplottet haben (dh
ax.plot(dates,ydata)
:Wenn Sie die Etiketten weiter formatieren müssen, überprüfen Sie den obigen Link.
Nicht-Datum / Uhrzeit-Objekte
Wie pro languitar ‚s Kommentar, die Methode , die ich für vorgeschlagene nicht-Datetime
xticks
nicht korrekt aktualisiert , wenn das Zoomen etc. Wenn es nicht ein istdatetime
Objekt verwendet als x-Achsen - Daten, sollten Sie folgen Tommy ‘ s Antwort :quelle
Viele "richtige" Antworten hier, aber ich werde noch eine hinzufügen, da ich denke, dass einige Details von mehreren weggelassen wurden. Das OP bat um eine 90-Grad-Drehung, 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 sind Ihre Beschriftungen außermittig und etwas irreführend (und ich vermute, dass viele Leute, die hierher kommen, die Achsen auf etwas anderes als 90 drehen möchten).
Einfachster / am wenigsten Code
Option 1
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 (er ist für Datumsobjekte vorgesehen, scheint jedoch auf jedem Etikett zu funktionieren; bezweifle jedoch, dass dies empfohlen wird):
fig
Sie würden normalerweise bekommen von:fig = plt.figure()
fig, ax = plt.subplots()
fig = ax.figure
Objektorientiert / Direkt mit
ax
Option 3a
Wenn Sie die Liste der Etiketten haben:
Option 3b
Wenn Sie die Liste der Beschriftungen aus dem aktuellen Plot abrufen möchten:
Option 4
Ähnlich wie oben, jedoch manuell durchlaufen.
Option 5
Wir verwenden hier immer noch
pyplot
(asplt
), aber es ist objektorientiert, weil wir die Eigenschaft eines bestimmtenax
Objekts ändern .Option 6
Diese Option ist einfach, aber AFAIK Sie können die Beschriftung nicht horizontal ausrichten, sodass eine andere Option möglicherweise besser ist, wenn Ihr Winkel nicht 90 beträgt.
Bearbeiten: Es gibt eine Diskussion über diesen genauen "Fehler" und ein Fix ist möglicherweise geplant für
v3.2.0
: https://github.com/matplotlib/matplotlib/issues/13774quelle
Versuchen Sie es mit pyplot.setp. Ich denke, Sie könnten so etwas tun:
quelle
Traceback (most recent call last): File "plotter.py", line 23, in <module> plt.setp(time, rotation=90) File "/usr/lib64/python2.7/site-packages/matplotlib/pyplot.py", line 183, in setp ret = _setp(*args, **kwargs) File "/usr/lib64/python2.7/site-packages/matplotlib/artist.py", line 1199, in setp func = getattr(o, funcName) AttributeError: 'datetime.datetime' object has no attribute 'set_rotation'
setp(subplot(111).get_xticklabels(), rotation=90)
problemlos mit dem Qt4Agg-Backend. In meinem Fall wird es von zurückgesetztplt.hist()
, also rufe ich es nachher auf, setze esplt.plot()
aber nicht zurück, also sollten Sie in Ordnung sein.locs, labels = plt.xticks() plt.setp(labels, rotation=90)
kurz zuvor hinzugefügtplt.plot(time, delay)
und es hat gut funktioniert.Appart von
das ist auch möglich:
quelle
plt.xticks(rotation=45) plt.savefig(nomefile,dpi=150, optimize=True) plt.clf()
Ich habe mir ein ähnliches Beispiel ausgedacht. Wieder ist das Rotationsschlüsselwort ... nun, es ist der Schlüssel.
quelle
datetime
Meine Antwort ist von der Antwort von cjohnson318 inspiriert, aber ich wollte keine fest codierte Liste von Etiketten liefern. Ich wollte die vorhandenen Beschriftungen drehen:
quelle
Bei Verwendung von
plt
:Wenn Sie Pandas oder Seaborn zum Plotten verwenden, nehmen Sie
ax
als Achsen für das Plotten an :Eine andere Möglichkeit, Folgendes zu tun:
quelle
for tick in ax.get_xticklabels(): tick.set_rotation(45)
hat den Trick für mich gemacht.Wenn Sie das Achsenobjekt drehen möchten, ist die Verwendung am einfachsten
tick_params
. Beispielsweise.Matplotlib-Dokumentationsreferenz hier .
Dies ist nützlich, wenn Sie ein Array von Achsen haben, wie von zurückgegeben
plt.subplots
, und es ist bequemer als die Verwendung,set_xticks
da Sie in diesem Fall auch die Tick-Beschriftungen festlegen müssen und auch bequemer als diejenigen, die über die Ticks iterieren (aus offensichtlichen Gründen).quelle
pd_dataframe.plot().tick_params(axis='x', labelrotation=90)
.labelrotation=30
.quelle
Es wird davon abhängen, was Sie planen.
Für Pandas und Seaborn, die Ihnen ein Axes-Objekt geben:
Wenn Sie Beschriftungen drehen müssen, müssen Sie möglicherweise auch die Schriftgröße ändern. Sie können dies verwenden
font_scale=1.0
.quelle
Drehen der Beschriftung der x-Achse um 90 Grad
quelle
Die einfachste Lösung ist zu verwenden:
aber auch
zB für Daten habe ich Rotation = 45 und unten = 0,20 verwendet, aber Sie können einige Tests für Ihre Daten durchführen
quelle