HOWTO · Matplotlib

X-Achsenwerte in Matplotlib festlegen

Dieses Tutorial zeigt, wie wir die X-Achsenwerte mit Hilfe der matplotlib.pyplot.xticks() in Matplotlib einstellen können.

Auf dieser Seite

Mit matplotlib.pyplot.xticks() legen Sie fest, an welchen Stellen Teilstriche auf der X-Achse erscheinen und optional, welcher Text dort angezeigt wird. Die Teilstrichpositionen bestimmen die horizontalen Koordinaten; sie ändern weder die dargestellten Daten noch den Achsentitel. Damit das Diagramm gut lesbar ist, sollte jede Beschriftung zur Position und zum Datenpunkt passen, den sie bezeichnet.

Positionen und Beschriftungen der X-Achse festlegen

Das erste Argument von xticks() ist eine Folge von Positionen. Mit dem optionalen zweiten Argument übergeben Sie eine Beschriftung für jede Position. Beide Folgen müssen gleich lang sein und dieselbe Reihenfolge haben. Das folgende Beispiel zeigt in einer Abbildung eigene Beschriftungen, numerische Abstände, eine Alternative mit gleichmäßig verteilten Indexpositionen und eine reduzierte Auswahl gedrehter Kategorienbeschriftungen.

import matplotlib.pyplot as plt

x = [1, 2, 5, 9]
y = [3, 5, 4, 8]
labels = ['Jan', 'Feb', 'May', 'Sep']
categories = ['North region', 'South region', 'East region', 'West region', 'Central region']
values = [12, 9, 14, 7, 11]

fig, axes = plt.subplots(2, 2, figsize=(10, 7))

axes[0, 0].plot(x, y, marker='o')
axes[0, 0].set_title('Custom labels')
axes[0, 0].set_xlabel('Month')
axes[0, 0].set_ylabel('Value')
plt.sca(axes[0, 0])
plt.xticks(x, labels)

axes[0, 1].plot(x, y, marker='o')
axes[0, 1].set_title('Numeric spacing')
axes[0, 1].set_xlabel('X value')
axes[0, 1].set_ylabel('Value')

index_positions = list(range(len(x)))
axes[1, 0].plot(index_positions, y, marker='o')
axes[1, 0].set_title('Evenly spaced positions')
axes[1, 0].set_xlabel('Month')
axes[1, 0].set_ylabel('Value')
axes[1, 0].set_xticks(index_positions)
axes[1, 0].set_xticklabels(labels)

axes[1, 1].bar(categories, values)
axes[1, 1].set_title('Fewer, rotated category labels')
axes[1, 1].set_ylabel('Value')
axes[1, 1].set_xticks([0, 2, 4])
axes[1, 1].set_xticklabels(categories[::2])
plt.sca(axes[1, 1])
plt.xticks(rotation=35, ha='right')

fig.tight_layout()
plt.show()

Im Diagramm oben links sind vier Positionen jeweils einer Monatsbeschriftung zugeordnet. Das numerische Diagramm verwendet die tatsächlichen X-Werte; deshalb ist der Abstand von 2 bis 5 größer als der von 1 bis 2. Im Diagramm unten links werden stattdessen die Positionen 0 bis 3 verwendet. So sind die Monate optisch gleichmäßig verteilt, während jeder Wert seinem Monat zugeordnet bleibt. Das letzte Diagramm enthält fünf Balken, zeigt zur Verringerung der Überfüllung aber nur an den Positionen 0, 2 und 4 Beschriftungen; diese sind gedreht und rechtsbündig ausgerichtet. Führen Sie das Skript in einer Python-Umgebung mit installiertem Matplotlib aus; eine aufgezeichnete Ausgabe ist hier nicht enthalten. Die Beschriftungen im unveränderten Beispiel bleiben englisch.

Ungleichmäßig verteilte X-Werte behandeln

Eine numerische Achse bildet numerische Abstände ab. Wenn Ihre Messwerte bei den X-Werten 1, 2, 5 und 9 liegen, entstehen beim Plotten dieser Werte korrekterweise größere Abstände zwischen 2 und 5 sowie zwischen 5 und 9. Monatsnamen als Teilstrichbeschriftungen ändern diese Koordinaten nicht. Behalten Sie diese Abstände bei, wenn Distanz oder verstrichene Zeit relevant sind.

Wenn Sie Kategorien in gleichen Abständen vergleichen möchten, plotten Sie die Y-Werte gegen Indexpositionen wie range(len(x)) und verwenden Sie anschließend die Kategorienamen als Teilstrichbeschriftungen. Datenfolge und Beschriftungen müssen dieselbe Reihenfolge haben. Dadurch wechselt die horizontale Skala von numerischen Abständen zur Kategorienreihenfolge. Diese Variante eignet sich daher nicht, wenn die Abstände zwischen den numerischen Messwerten eine Bedeutung haben.

Wenn die Beschriftungen Datumsangaben darstellen sollen, verwenden Sie Datumswerte als geplottete X-Daten und formatieren Sie die Datumsteilstriche nach Bedarf. Monatsnamen beliebigen numerischen Koordinaten zuzuweisen, macht diese nicht zu Datumswerten.

Teilstrichhäufigkeit steuern und Beschriftungen besser lesbar machen

Bei einem kleinen Diagramm können Sie xticks() explizite Positionen übergeben, um nur ausgewählte Teilstriche anzuzeigen. Zum Beispiel wählt plt.xticks(x[::2]) jeden zweiten Wert einer geordneten Folge aus. Bei einer regelmäßigen numerischen Skala kann ein Locator ein passendes Intervall wählen, wenn sich der sichtbare Ausschnitt ändert. Importieren Sie etwa MultipleLocator aus matplotlib.ticker und rufen Sie ax.xaxis.set_major_locator(MultipleLocator(2)) auf, um Hauptteilstriche im Abstand von zwei Einheiten anzufordern. Verwenden Sie explizite Positionen für aussagekräftige Kategorienbeschriftungen und einen Locator für numerische Achsen.

Lange Beschriftungen lassen sich mit plt.xticks(rotation=35, ha='right') drehen; ha legt die horizontale Ausrichtung fest. Wenn sich gedrehte Beschriftungen weiterhin überschneiden, vergrößern Sie die Abbildungsbreite oder zeigen Sie weniger Teilstriche an. tight_layout() kann Platz um die Achsen schaffen, entscheidet aber nicht, welche Teilstriche geeignet sind.

Das Beispiel oben verwendet bei den meisten Teilgrafiken set_xticks für einzelne Achsen und xticks zur Anpassung der Beschriftungen an der aktuellen Achse. Im objektorientierten Stil bleibt der Aufruf mit ax.set_xticks(positions, labels) an eine bestimmte Achse gebunden. Bei pyplot wählen Sie zuerst die gewünschte Achse aus, wenn eine Abbildung mehrere Diagramme enthält.

FAQ: X-Achsenwerte festlegen

Kann ich Positionen und Beschriftungen in einem Aufruf festlegen? Ja. Übergeben Sie beide Folgen an plt.xticks(positions, labels) oder verwenden Sie ax.set_xticks(positions, labels). Jede Beschriftung wird anhand ihres Index der entsprechenden Position zugeordnet.

Wie zeige ich weniger Teilstriche an? Übergeben Sie eine kürzere Liste von Teilstrichpositionen oder verwenden Sie für regelmäßig verteilte numerische Teilstriche einen Locator. Die Häufigkeit der Teilstriche ist unabhängig von der Anzahl der geplotteten Datenpunkte.

Kann ich Textkategorien auf der X-Achse verwenden? Ja. Plotten Sie die Kategorienwerte direkt, wie im Balkendiagramm, oder verwenden Sie numerische Indexpositionen und weisen Sie ihnen die Kategorienamen als Beschriftungen zu. Die zweite Variante ist sinnvoll, wenn Sie eine bestimmte Kategorienreihenfolge oder gleiche Abstände benötigen.

Was kann ich bei überlappenden Beschriftungen versuchen? Zeigen Sie weniger Beschriftungen an, drehen Sie sie, richten Sie gedrehten Text rechtsbündig aus oder vergrößern Sie die Abbildung. Diese Änderungen betreffen die Teilstrichbeschriftungen, nicht die geplotteten Werte.