Markevery Demo#

Die Eigenschaft markevery von Line2D ermöglicht das Zeichnen von Markern an einer Teilmenge von Datenpunkten.

Die Liste möglicher Parameter ist unter Line2D.set_markevery spezifiziert. Kurz gesagt:

  • Eine einzelne Ganzzahl N zeichnet jeden N-ten Marker.

  • Ein Tupel von Ganzzahlen (start, N) zeichnet jeden N-ten Marker, beginnend bei Index start.

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

  • Ein Slice zeichnet die Marker an den gesliceten Indizes.

  • Eine Gleitkommazahl spezifiziert den Abstand zwischen den Markern als Bruchteil der Achsendiagonale im Bildschirmraum. Dies führt zu einer visuell gleichmäßigen Verteilung der Punkte entlang der Linie, unabhängig von Skalen und Zoom.

import matplotlib.pyplot as plt
import numpy as np

# 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

markevery mit linearen Skalen#

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)
markevery=None, 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 mit logarithmischen Skalen#

Beachten Sie, dass die logarithmische Skala eine visuelle Asymmetrie im Markerabstand verursacht, wenn die Daten mit einer Ganzzahl untersampelt werden. Im Gegensatz dazu erzeugt die Untersampelung basierend auf einem Bruchteil der Figurengröße gleichmäßige Verteilungen, da sie auf Bruchteilen der Achsendiagonale basiert und nicht auf Datenkoordinaten oder Datenindizes.

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)
markevery=None, 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 bei gezoomten Plots#

Ganzzahlbasierte markevery-Spezifikationen wählen Punkte aus den zugrundeliegenden Daten aus und sind unabhängig von der Ansicht. Im Gegensatz dazu beziehen sich gleitkommazahlbasierte Spezifikationen auf die Achsendiagonale. Während das Zoomen die Achsendiagonale nicht verändert, verändert es den angezeigten Datenbereich, und mehr Punkte werden beim Zoomen angezeigt.

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))
markevery=None, 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 Polarkoordinaten-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)

plt.show()
markevery=None, 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)

Tags: Komponente: Marker Plot-Typ: Linie Level: Anfänger

Gesamtlaufzeit des Skripts: (0 Minuten 12,375 Sekunden)

Galerie generiert von Sphinx-Gallery