Markevery Demo #

Die markeveryEigenschaft von Line2Dermöglicht das Zeichnen von Markierungen an einer Teilmenge von Datenpunkten.

Die Liste der möglichen Parameter ist unter angegeben Line2D.set_markevery. Zusamenfassend:

  • Eine einzelne ganze Zahl N zeichnet jede N-te Markierung.

  • Ein Tupel aus ganzen Zahlen (start, N) zeichnet jeden N-ten Marker, beginnend am Datenindex start .

  • Eine Liste von Ganzzahlen zeichnet die Markierungen an den angegebenen Indizes.

  • Ein Slice zeichnet die Markierungen an den Slice-Indizes.

  • Ein Float gibt den Abstand zwischen Markierungen als Bruchteil der Achsendiagonalen im Bildschirmbereich an. Dies führt zu einer optisch gleichmäßigen Verteilung der Punkte entlang der Linie, unabhängig von Maßstab und Zoom.

import numpy as np
import matplotlib.pyplot as plt

# define a list of markevery cases to plot
cases = [
    None,
    8,
    (30, 8),
    [16, 24, 32],
    [0, -1],
    slice(100, 200, 3),
    0.1,
    0.4,
    (0.2, 0.4)
]

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

Markery mit linearen Skalen #

fig, axs = plt.subplots(3, 3, figsize=(10, 6), constrained_layout=True)
for ax, markevery in zip(axs.flat, cases):
    ax.set_title(f'markevery={markevery}')
    ax.plot(x, y, 'o', ls='-', ms=4, markevery=markevery)
markevery=Keine, markevery=8, markevery=(30, 8), markevery=[16, 24, 32], markevery=[0, -1], markevery=slice(100, 200, 3), markevery=0.1, markevery=0.4, markevery=(0.2, 0.4)

Markery mit logarithmischen Waagen #

Beachten Sie, dass die logarithmische Skalierung eine visuelle Asymmetrie im Markierungsabstand verursacht, wenn die Daten unter Verwendung einer Ganzzahl subsampling werden. Im Gegensatz dazu erzeugt die Unterabtastung auf Bruchteilen der Zahlengröße gleichmäßige Verteilungen, da sie auf Bruchteilen der Achsendiagonale und nicht auf Datenkoordinaten oder Datenindizes basiert.

fig, axs = plt.subplots(3, 3, figsize=(10, 6), constrained_layout=True)
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)
markevery=Keine, markevery=8, markevery=(30, 8), markevery=[16, 24, 32], markevery=[0, -1], markevery=slice(100, 200, 3), markevery=0.1, markevery=0.4, markevery=(0.2, 0.4)

Markevery auf gezoomten Plots #

Integer-basierte Markevery - Spezifikationen wählen Punkte aus den zugrunde liegenden Daten aus und sind unabhängig von der Ansicht. Im Gegensatz dazu beziehen sich Float-basierte Angaben auf die Achsendiagonale. Während das Zoomen die Achsendiagonale nicht ändert, ändert es den angezeigten Datenbereich, und beim Zoomen werden mehr Punkte angezeigt.

fig, axs = plt.subplots(3, 3, figsize=(10, 6), constrained_layout=True)
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))
markevery=Keine, markevery=8, markevery=(30, 8), markevery=[16, 24, 32], markevery=[0, -1], markevery=slice(100, 200, 3), markevery=0.1, markevery=0.4, markevery=(0.2, 0.4)

Markevery auf Polarplots #

r = np.linspace(0, 3.0, 200)
theta = 2 * np.pi * r

fig, axs = plt.subplots(3, 3, figsize=(10, 6), constrained_layout=True,
                        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)

plt.show()
markevery=Keine, markevery=8, markevery=(30, 8), markevery=[16, 24, 32], markevery=[0, -1], markevery=slice(100, 200, 3), markevery=0.1, markevery=0.4, markevery=(0.2, 0.4)

Gesamtlaufzeit des Skripts: ( 0 Minuten 10,927 Sekunden)

Galerie generiert von Sphinx-Gallery