Hinweis
Zum Ende springen, um den vollständigen Beispielcode herunterzuladen.
Zu viele Ticks beheben#
Eine häufige Ursache für unerwartetes Tick-Verhalten ist die Übergabe einer Liste von Zeichenketten anstelle von Zahlen oder Datumsobjekten. Dies kann leicht unbemerkt geschehen, wenn eine durch Kommas getrennte Textdatei eingelesen wird. Matplotlib behandelt Listen von Zeichenketten als kategoriale Variablen (Plotten kategorialer Variablen) und platziert standardmäßig einen Tick pro Kategorie, wobei diese in der Reihenfolge geplottet werden, in der sie übergeben werden. Wenn dies nicht gewünscht ist, besteht die Lösung darin, die Zeichenketten wie in den folgenden Beispielen in einen numerischen Typ umzuwandeln.
Beispiel 1: Zeichenketten können zu einer unerwarteten Reihenfolge von Zahlenticks führen#
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(1, 2, layout='constrained', figsize=(6, 2.5))
x = ['1', '5', '2', '3']
y = [1, 4, 2, 3]
ax[0].plot(x, y, 'd')
ax[0].tick_params(axis='x', color='r', labelcolor='r')
ax[0].set_xlabel('Categories')
ax[0].set_title('Ticks seem out of order / misplaced')
# convert to numbers:
x = np.asarray(x, dtype='float')
ax[1].plot(x, y, 'd')
ax[1].set_xlabel('Floats')
ax[1].set_title('Ticks as expected')

Beispiel 2: Zeichenketten können zu sehr vielen Ticks führen#
Wenn x 100 Elemente hat, alle Zeichenketten sind, dann hätten wir 100 (unleserliche) Ticks, und wieder ist die Lösung, die Zeichenketten in Gleitkommazahlen umzuwandeln
fig, ax = plt.subplots(1, 2, figsize=(6, 2.5))
x = [f'{xx}' for xx in np.arange(100)]
y = np.arange(100)
ax[0].plot(x, y)
ax[0].tick_params(axis='x', color='r', labelcolor='r')
ax[0].set_title('Too many ticks')
ax[0].set_xlabel('Categories')
ax[1].plot(np.asarray(x, float), y)
ax[1].set_title('x converted to numbers')
ax[1].set_xlabel('Floats')

Beispiel 3: Zeichenketten können zu einer unerwarteten Reihenfolge von Datumsticken führen#
Ein häufiger Fall ist, wenn Daten aus einer CSV-Datei gelesen werden; sie müssen von Zeichenketten in Datumsobjekte konvertiert werden, um die richtigen Datums-Locators und -Formatierer zu erhalten.
fig, ax = plt.subplots(1, 2, layout='constrained', figsize=(6, 2.75))
x = ['2021-10-01', '2021-11-02', '2021-12-03', '2021-09-01']
y = [0, 2, 3, 1]
ax[0].plot(x, y, 'd')
ax[0].tick_params(axis='x', labelrotation=90, color='r', labelcolor='r')
ax[0].set_title('Dates out of order')
# convert to datetime64
x = np.asarray(x, dtype='datetime64[s]')
ax[1].plot(x, y, 'd')
ax[1].tick_params(axis='x', labelrotation=90)
ax[1].set_title('x converted to datetimes')
plt.show()

Gesamtlaufzeit des Skripts: (0 Minuten 2.115 Sekunden)