Oft möchten Sie möglicherweise die Farbe von Punkten innerhalb eines Matplotlib-Streudiagramms basierend auf einer dritten Variablen schattieren. Glücklicherweise ist dies mit der Funktion matplotlib.pyplot.scatter (), die die folgende Syntax …
Das Seitenverhältnis eines Matplotlib-Diagramms bezieht sich auf den Aspekt der Achsenskalierung, d.h. das Verhältnis von y-Einheit zu x-Einheit.
Dieses Verhältnis kann mithilfe der Funktion matplotlib.axes.Axes.set_aspect() geändert werden.
Unter der Haube ändert die set_aspect() Funktion tatsächlich das Daten-Koordinatensystem, aber in der Praxis wollen wir in der Regel das Anzeige-Koordinatensystem ändern.
Um diese Konvertierung zu vereinfachen, können wir diesen Code verwenden:
# Definieren Sie das Verhältnis von y-Einheit zu x-Einheit
ratio = 1.0
# x- und y-Grenzen abfragen
x_left, x_right = ax.get_xlim()
y_low, y_high = ax.get_ylim()
# Seitenverhältnis einstellen
ax.set_aspect(abs((x_right-x_left)/(y_low-y_high))*ratio)
Lassen Sie uns ein Beispiel für die praktische Verwendung dieser Funktion durchgehen.
Schritt 1: Erstellen Sie ein einfaches Matplotlib-Diagramm
Lassen Sie uns zunächst mit Matplotlib ein einfaches Liniendiagramm erstellen:
import matplotlib.pyplot as plt
# Matplotlib Plot und Achse definieren
fig, ax = plt.subplots()
# Erstellen Sie ein einfaches Liniendiagramm
ax.plot([0, 10],[0, 20])
#Plot anzeigen
plt.show()
Schritt 2: Stellen Sie das Seitenverhältnis ein (The Wrong Way)
Beachten Sie, dass die x-Achse länger als die y-Achse ist. Versuchen wir, das Seitenverhältnis auf 1 zu setzen, d.h. die x-Achse und die y-Achse sollten gleich sein:
import matplotlib.pyplot as plt
# Matplotlib Plot und Achse definieren
fig, ax = plt.subplots()
# Erstellen Sie ein einfaches Liniendiagramm
ax.plot([0, 10],[0, 20])
# Ein Versuch das Seitenverhältnis auf 1 zu setzen
ax.set_aspect(1)
# Plot anzeigen
plt.show()
Beachten Sie, dass dies nicht wie erwartet funktioniert hat. Die y-Achse ist viel länger als die x-Achse.
Schritt 3: Stellen Sie das Seitenverhältnis ein (der richtige Weg)
Der folgende Code zeigt, wie Sie mit einer einfachen Berechnung das richtige Seitenverhältnis einstellen:
import matplotlib.pyplot as plt
# Matplotlib Plot und Achse definieren
fig, ax = plt.subplots()
# Erstellen Sie ein einfaches Liniendiagramm
ax.plot([0, 10],[0, 20])
# Seitenverhältnis auf 1 setzen
ratio = 1.0
x_left, x_right = ax.get_xlim()
y_low, y_high = ax.get_ylim()
ax.set_aspect(abs((x_right-x_left)/(y_low-y_high))*ratio)
# Plot anzeigen
plt.show()
Beachten Sie, dass dieses Diagramm das erwartete Seitenverhältnis aufweist. Die x-Achse und die y-Achse sind gleich lang.
Schritt 4: Passen Sie das Seitenverhältnis an Ihre Wünsche an
Wenn wir möchten, dass die y-Achse länger als die x-Achse ist, können wir einfach das Seitenverhältnis so angeben, dass es eine Zahl größer als 1 ist:
import matplotlib.pyplot as plt
# Matplotlib Plot und Achse definieren
fig, ax = plt.subplots()
# Erstellen Sie ein einfaches Liniendiagramm
ax.plot([0, 10],[0, 20])
# Seitenverhältnis auf 3 setzen
ratio = 3
x_left, x_right = ax.get_xlim()
y_low, y_high = ax.get_ylim()
ax.set_aspect(abs((x_right-x_left)/(y_low-y_high))*ratio)
# Plot anzeigen
plt.show()
Und wenn wir möchten, dass die y-Achse kürzer als die x-Achse ist, können wir einfach das Seitenverhältnis so angeben, dass es eine Zahl kleiner als 1 ist:
import matplotlib.pyplot as plt
# Matplotlib Plot und Achse definieren
fig, ax = plt.subplots()
# Erstellen Sie ein einfaches Liniendiagramm
ax.plot([0, 10],[0, 20])
# Seitenverhältnis auf .3 setzen
ratio = .3
x_left, x_right = ax.get_xlim()
y_low, y_high = ax.get_ylim()
ax.set_aspect(abs((x_right-x_left)/(y_low-y_high))*ratio)
# Plot anzeigen
plt.show()
Weitere Matplotlib-Tutorials finden Sie hier.
Matplotlib: So färben Sie ein Streudiagramm nach Wert
Gestapelte Balkendiagramme in Matplotlib (mit Beispielen)
Ein gestapeltes Balkendiagramm ist eine Art Diagramm, bei dem Balken verwendet werden, um die Häufigkeit verschiedener Kategorien anzuzeigen. Wir können diesen Diagrammtyp in Matplotlib mithilfe der Funktion matplotlib.pyplot.bar …