Markevery Démo #

La markeverypropriété de Line2Dpermet de tracer des marqueurs sur un sous-ensemble de points de données.

La liste des paramètres possibles est précisée à Line2D.set_markevery. Bref:

  • Un seul entier N dessine chaque N-ième marqueur.

  • Un tuple d'entiers (start, N) dessine chaque N-ième marqueur, en commençant à l'index de données start .

  • Une liste d'entiers dessine les marqueurs aux indices spécifiés.

  • Une tranche dessine les marqueurs aux indices tranchés.

  • Un flottant spécifie la distance entre les marqueurs sous la forme d'une fraction de la diagonale des axes dans l'espace de l'écran. Cela conduira à une distribution visuellement uniforme des points le long de la ligne, indépendamment des échelles et du 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

markevery avec des échelles linéaires #

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=Aucun, markevery=8, markevery=(30, 8), markevery=[16, 24, 32], markevery=[0, -1], markevery=tranche(100, 200, 3), markevery=0.1, marquetoutes=0,4, marquetoutes=(0,2, 0,4)

markevery avec des échelles logarithmiques #

Notez que l'échelle logarithmique provoque une asymétrie visuelle dans la distance du marqueur lors du sous-échantillonnage des données à l'aide d'un nombre entier. En revanche, le sous-échantillonnage sur une fraction de la taille de la figure crée des distributions égales, car il est basé sur des fractions de la diagonale des axes, et non sur des coordonnées de données ou des indices de données.

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=Aucun, markevery=8, markevery=(30, 8), markevery=[16, 24, 32], markevery=[0, -1], markevery=tranche(100, 200, 3), markevery=0.1, marquetoutes=0,4, marquetoutes=(0,2, 0,4)

markevery sur les parcelles zoomées #

Les spécifications Markevery basées sur des nombres entiers sélectionnent des points à partir des données sous-jacentes et sont indépendantes de la vue. En revanche, les spécifications basées sur le flottement sont liées à la diagonale des axes. Bien que le zoom ne modifie pas la diagonale des axes, il modifie la plage de données affichées et davantage de points seront affichés lors du zoom.

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=Aucun, markevery=8, markevery=(30, 8), markevery=[16, 24, 32], markevery=[0, -1], markevery=tranche(100, 200, 3), markevery=0.1, marquetoutes=0,4, marquetoutes=(0,2, 0,4)

markevery sur les tracés polaires #

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=Aucun, markevery=8, markevery=(30, 8), markevery=[16, 24, 32], markevery=[0, -1], markevery=tranche(100, 200, 3), markevery=0.1, marquetoutes=0,4, marquetoutes=(0,2, 0,4)

Durée totale d'exécution du script : (0 minutes 10,927 secondes)

Galerie générée par Sphinx-Gallery