Marketvery Demo #

La markeveryproprietà di Line2Dconsente di tracciare indicatori in un sottoinsieme di punti dati.

L'elenco dei possibili parametri è specificato in Line2D.set_markevery. In breve:

  • Un singolo numero intero N disegna ogni N-esimo marcatore.

  • Una tupla di numeri interi (start, N) disegna ogni N-esimo marcatore, a partire dall'indice di dati start .

  • Un elenco di numeri interi disegna i marcatori in corrispondenza degli indici specificati.

  • Una sezione disegna i marcatori in corrispondenza degli indici delle sezioni.

  • Un float specifica la distanza tra i marcatori come frazione della diagonale degli assi nello spazio dello schermo. Ciò porterà a una distribuzione visivamente uniforme dei punti lungo la linea, indipendentemente dalle scale e dallo 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 con scale lineari #

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=Nessuno, 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 con scale logaritmiche #

Si noti che la scala logaritmica provoca un'asimmetria visiva nella distanza del marker per il sottocampionamento dei dati utilizzando un numero intero. Al contrario, il sottocampionamento sulla frazione della dimensione della figura crea distribuzioni uniformi, perché si basa su frazioni della diagonale degli assi, non sulle coordinate dei dati o sugli indici dei dati.

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=Nessuno, 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 sui grafici ingranditi #

Le specifiche markevery basate su numeri interi selezionano punti dai dati sottostanti e sono indipendenti dalla vista. Al contrario, le specifiche basate su float sono correlate alla diagonale degli assi. Mentre lo zoom non cambia la diagonale degli assi, cambia l'intervallo di dati visualizzato e durante lo zoom verranno visualizzati più punti.

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=Nessuno, 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 sui grafici polari #

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=Nessuno, 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)

Tempo di esecuzione totale dello script: (0 minuti 10,927 secondi)

Galleria generata da Sphinx-Gallery