Tutorial de Personalização de Marcadores no Matplotlib

Beginner

This tutorial is from open-source community. Access the source code

Introdução

Este tutorial irá guiá-lo através do processo de utilização da propriedade markevery de Line2D para desenhar marcadores em um subconjunto de pontos de dados no Matplotlib. Abordaremos várias maneiras de especificar os marcadores, incluindo o uso de inteiros, tuplas, listas, fatias (slices) e floats. Também exploraremos como markevery se comporta com escalas lineares e logarítmicas, bem como com gráficos com zoom e polares.

Dicas para a VM

Após a inicialização da VM, clique no canto superior esquerdo para mudar para a aba Notebook e acessar o Jupyter Notebook para praticar.

Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se você enfrentar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão, e resolveremos o problema prontamente para você.

Definir os Pontos de Dados

Primeiramente, definimos os pontos de dados que usaremos para nossos gráficos. Neste exemplo, usamos numpy para gerar um conjunto de valores x e y para uma onda senoidal.

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

Criar Gráficos com Escalas Lineares

Em seguida, criamos um conjunto de subplots para mostrar como markevery se comporta com escalas lineares. Iteramos pela lista cases e plotamos cada caso em um subplot separado. Usamos o parâmetro markevery para especificar quais pontos de dados marcar.

## create plots with linear scales
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)

Criar Gráficos com Escalas Logarítmicas

Repetimos o passo anterior, mas desta vez com escalas logarítmicas. Notamos que a escala logarítmica causa uma assimetria visual na distância do marcador para subamostragem baseada em inteiros, enquanto a subamostragem baseada em frações cria distribuições uniformes.

## create plots with logarithmic scales
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)

Criar Gráficos Zoomados

Criamos outro conjunto de subplots, desta vez para mostrar como markevery se comporta em gráficos zoomados. Notamos que a subamostragem baseada em inteiros seleciona pontos dos dados subjacentes e é independente da visualização, enquanto a subamostragem baseada em float está relacionada à diagonal dos eixos (Axes) e altera a faixa de dados exibida.

## create zoomed plots
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))

Criar Gráficos Polares

Finalmente, criamos um conjunto de subplots para mostrar como markevery se comporta em gráficos polares. Notamos que o comportamento é semelhante ao das escalas lineares.

## create polar 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)

Resumo

Neste tutorial, aprendemos como usar a propriedade markevery de Line2D para desenhar marcadores em um subconjunto de pontos de dados no Matplotlib. Exploramos várias maneiras de especificar os marcadores, incluindo o uso de inteiros, tuplas, listas, fatias (slices) e floats. Também vimos como markevery se comporta com escalas lineares e logarítmicas, bem como com gráficos zoomados e polares.