Demostración Markevery #

La markeverypropiedad de Line2Dpermite dibujar marcadores en un subconjunto de puntos de datos.

La lista de posibles parámetros se especifica en Line2D.set_markevery. En breve:

  • Un solo entero N dibuja cada N-ésimo marcador.

  • Una tupla de enteros (inicio, N) dibuja cada N-ésimo marcador, comenzando en el inicio del índice de datos .

  • Una lista de enteros dibuja los marcadores en los índices especificados.

  • Un corte dibuja los marcadores en los índices cortados.

  • Un flotante especifica la distancia entre los marcadores como una fracción de la diagonal de los ejes en el espacio de la pantalla. Esto conducirá a una distribución visualmente uniforme de los puntos a lo largo de la línea, independientemente de las escalas y el 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 escalas lineales #

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)
marcar cada=Ninguno, marcar cada=8, marcar cada=(30, 8), marcar cada=[16, 24, 32], marcar cada=[0, -1], marcar cada=segmento(100, 200, 3), marcar cada=0.1, marcar cada=0.4, marcar cada=(0.2, 0.4)

markevery con escalas logarítmicas #

Tenga en cuenta que la escala logarítmica provoca una asimetría visual en la distancia del marcador cuando se submuestrean los datos con un número entero. Por el contrario, el submuestreo en fracciones del tamaño de la figura crea distribuciones uniformes, porque se basa en fracciones de la diagonal de los ejes, no en coordenadas de datos o índices de datos.

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)
marcar cada=Ninguno, marcar cada=8, marcar cada=(30, 8), marcar cada=[16, 24, 32], marcar cada=[0, -1], marcar cada=segmento(100, 200, 3), marcar cada=0.1, marcar cada=0.4, marcar cada=(0.2, 0.4)

markevery en parcelas ampliadas #

Las especificaciones markevery basadas en enteros seleccionan puntos de los datos subyacentes y son independientes de la vista. Por el contrario, las especificaciones basadas en flotantes están relacionadas con la diagonal de los ejes. Si bien el zoom no cambia la diagonal de los ejes, cambia el rango de datos mostrado y se mostrarán más puntos al hacer 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))
marcar cada=Ninguno, marcar cada=8, marcar cada=(30, 8), marcar cada=[16, 24, 32], marcar cada=[0, -1], marcar cada=segmento(100, 200, 3), marcar cada=0.1, marcar cada=0.4, marcar cada=(0.2, 0.4)

markevery en parcelas polares #

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()
marcar cada=Ninguno, marcar cada=8, marcar cada=(30, 8), marcar cada=[16, 24, 32], marcar cada=[0, -1], marcar cada=segmento(100, 200, 3), marcar cada=0.1, marcar cada=0.4, marcar cada=(0.2, 0.4)

Tiempo total de ejecución del script: (0 minutos 10,927 segundos)

Galería generada por Sphinx-Gallery