Matplotlib Marker Anpassung Tutorial

PythonPythonBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Tutorial führen wir Sie durch den Prozess der Verwendung der markevery-Eigenschaft von Line2D, um Marker an einem Teilmengen von Datenpunkten in Matplotlib zu zeichnen. Wir werden verschiedene Möglichkeiten zur Angabe der Marker behandeln, einschließlich der Verwendung von ganzen Zahlen, Tupeln, Listen, Slices und Fließkommazahlen. Wir werden auch untersuchen, wie markevery mit linearen und logarithmischen Skalen sowie mit vergrößertem und polarem Graphen verhält.

Tipps für die VM

Nachdem der VM-Start abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu öffnen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund von Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.

Definieren der Datenpunkte

Zunächst definieren wir die Datenpunkte, die wir für unsere Graphen verwenden werden. In diesem Beispiel verwenden wir numpy, um eine Menge von x- und y-Werten für eine Sinuswelle zu generieren.

import matplotlib.pyplot as plt
import numpy as np

## definieren einer Liste von markevery-Fällen, die geplottet werden sollen
cases = [
    None,
    8,
    (30, 8),
    [16, 24, 32],
    [0, -1],
    slice(100, 200, 3),
    0.1,
    0.4,
    (0.2, 0.4)
]

## Datenpunkte
delta = 0.11
x = np.linspace(0, 10 - 2 * delta, 200) + delta
y = np.sin(x) + 1.0 + delta

Erstellen von Graphen mit linearen Skalen

Als nächstes erstellen wir eine Reihe von Teilgraphen, um zu zeigen, wie markevery mit linearen Skalen verhält. Wir iterieren durch die cases-Liste und plotten jeden Fall in einem separaten Teilgraphen. Wir verwenden den Parameter markevery, um anzugeben, welche Datenpunkte markiert werden sollen.

## create plots with linear scales
fig, axs = plt.subplots(3, 3, figsize=(10, 6), layout='constrained')
for ax, markevery in zip(axs.flat, cases):
    ax.set_title(f'markevery={markevery}')
    ax.plot(x, y, 'o', ls='-', ms=4, markevery=markevery)

Erstellen von Graphen mit logarithmischen Skalen

Wir wiederholen den vorherigen Schritt, aber diesmal mit logarithmischen Skalen. Wir stellen fest, dass die logarithmische Skala eine visuelle Asymmetrie in der Markierungsdistanz bei der ganzzahlbasierten Subsampling verursacht, während die bruchbasierten Subsampling gleichmäßige Verteilungen erzeugt.

## create plots with logarithmic scales
fig, axs = plt.subplots(3, 3, figsize=(10, 6), layout='constrained')
for ax, markevery in zip(axs.flat, cases):
    ax.set_title(f'markevery={markevery}')
    ax.set_xscale('log')
    ax.set_yscale('log')
    ax.plot(x, y, 'o', ls='-', ms=4, markevery=markevery)

Erstellen von vergrößerten Graphen

Wir erstellen eine weitere Reihe von Teilgraphen, um diesmal zu zeigen, wie markevery auf vergrößerten Graphen verhält. Wir stellen fest, dass die ganzzahlbasierte Subsampling Punkte aus den zugrunde liegenden Daten auswählt und unabhängig von der Ansicht ist, während die fließkommazahlbasierte Subsampling mit der Achsen-Diagonalen zusammenhängt und den angezeigten Datensatz ändert.

## create zoomed plots
fig, axs = plt.subplots(3, 3, figsize=(10, 6), layout='constrained')
for ax, markevery in zip(axs.flat, cases):
    ax.set_title(f'markevery={markevery}')
    ax.plot(x, y, 'o', ls='-', ms=4, markevery=markevery)
    ax.set_xlim((6, 6.7))
    ax.set_ylim((1.1, 1.7))

Erstellen von Polarkoordinaten-Graphen

Schließlich erstellen wir eine Reihe von Teilgraphen, um zu zeigen, wie markevery auf Polarkoordinaten-Graphen verhält. Wir stellen fest, dass das Verhalten ähnlich zu dem bei linearen Skalen ist.

## create polar plots
r = np.linspace(0, 3.0, 200)
theta = 2 * np.pi * r

fig, axs = plt.subplots(3, 3, figsize=(10, 6), layout='constrained',
                        subplot_kw={'projection': 'polar'})
for ax, markevery in zip(axs.flat, cases):
    ax.set_title(f'markevery={markevery}')
    ax.plot(theta, r, 'o', ls='-', ms=4, markevery=markevery)

Zusammenfassung

In diesem Tutorial haben wir gelernt, wie wir die Eigenschaft markevery von Line2D verwenden, um Marker an einem Teilmengen von Datenpunkten in Matplotlib zu zeichnen. Wir haben verschiedene Möglichkeiten untersucht, um die Marker anzugeben, darunter die Verwendung von ganzen Zahlen, Tupeln, Listen, Slices und Fließkommazahlen. Wir haben auch gesehen, wie markevery mit linearen und logarithmischen Skalen, sowie mit vergrößerten und Polarkoordinaten-Graphen verhält.