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.