Demonstração Markevery #

A markeverypropriedade Line2Dpermite desenhar marcadores em um subconjunto de pontos de dados.

A lista de parâmetros possíveis é especificada em Line2D.set_markevery. Resumidamente:

  • Um único inteiro N desenha cada N-ésimo marcador.

  • Uma tupla de inteiros (start, N) desenha cada N-ésimo marcador, começando no data index start .

  • Uma lista de inteiros desenha os marcadores nos índices especificados.

  • Uma fatia desenha os marcadores nos índices fatiados.

  • Um float especifica a distância entre os marcadores como uma fração da diagonal dos eixos no espaço da tela. Isso levará a uma distribuição visualmente uniforme dos pontos ao longo da linha, independentemente de escalas e 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 com escalas lineares #

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=Nenhum, markevery=8, markevery=(30, 8), markevery=[16, 24, 32], markevery=[0, -1], markevery=fatia(100, 200, 3), markevery=0.1, markevery=0.4, markevery=(0.2, 0.4)

markevery com escalas de log #

Observe que a escala de log causa uma assimetria visual na distância do marcador ao subamostrar os dados usando um número inteiro. Em contraste, a subamostragem na fração do tamanho da figura cria distribuições uniformes, porque é baseada em frações da diagonal dos eixos, não em coordenadas de dados ou índices de dados.

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=Nenhum, markevery=8, markevery=(30, 8), markevery=[16, 24, 32], markevery=[0, -1], markevery=fatia(100, 200, 3), markevery=0.1, markevery=0.4, markevery=(0.2, 0.4)

markevery em parcelas ampliadas #

As especificações de marcações baseadas em números inteiros selecionam pontos dos dados subjacentes e são independentes na exibição. Por outro lado, as especificações baseadas em flutuação estão relacionadas à diagonal dos eixos. Embora o zoom não altere a diagonal dos eixos, ele altera o intervalo de dados exibido e mais pontos serão exibidos ao aplicar 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=Nenhum, markevery=8, markevery=(30, 8), markevery=[16, 24, 32], markevery=[0, -1], markevery=fatia(100, 200, 3), markevery=0.1, markevery=0.4, markevery=(0.2, 0.4)

markevery em gráficos 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()
markevery=Nenhum, markevery=8, markevery=(30, 8), markevery=[16, 24, 32], markevery=[0, -1], markevery=fatia(100, 200, 3), markevery=0.1, markevery=0.4, markevery=(0.2, 0.4)

Tempo total de execução do script: ( 0 minutos 10,927 segundos)

Galeria gerada por Sphinx-Gallery