Notiz
Klicken Sie hier , um den vollständigen Beispielcode herunterzuladen
Zu viele Ticks beheben #
Eine häufige Ursache für unerwartetes Tick-Verhalten ist das Übergeben einer Liste von Zeichenfolgen anstelle von Zahlen oder Datetime-Objekten. Dies kann beim Einlesen einer kommaseparierten Textdatei leicht ohne Vorankündigung passieren. Matplotlib behandelt Listen von Strings als kategoriale Variablen ( Plotten kategorialer Variablen ) und setzt standardmäßig ein Häkchen pro Kategorie und zeichnet sie in der Reihenfolge, in der sie bereitgestellt werden. Wenn dies nicht erwünscht ist, besteht die Lösung darin, die Zeichenfolgen wie in den folgenden Beispielen in einen numerischen Typ zu konvertieren.
Beispiel 1: Strings 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, constrained_layout=True, 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')
Text(0.5, 1.0, 'Ticks as expected')
Beispiel 2: Strings können zu sehr vielen Ticks führen #
Wenn x 100 Elemente hat, alle Strings, dann hätten wir 100 (nicht lesbare) Ticks, und auch hier besteht die Lösung darin, die Strings in Floats 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')
Text(0.5, -3.555555555555568, 'Floats')
Beispiel 3: Strings können zu einer unerwarteten Reihenfolge von Datetime-Ticks führen #
Ein häufiger Fall ist, wenn Datumsangaben aus einer CSV-Datei gelesen werden, müssen sie von Zeichenfolgen in datetime-Objekte konvertiert werden, um die richtigen Datumslokatoren und -formatierer zu erhalten.
fig, ax = plt.subplots(1, 2, constrained_layout=True, 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 1.403 Sekunden)