Criar Linhas Multicoloridas no Matplotlib

Beginner

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

Introdução

Neste laboratório, aprenderemos como criar linhas multicoloridas no Matplotlib. Usaremos a função LineCollection para criar um conjunto de segmentos de linha e colori-los individualmente com base em sua derivada. Também aprenderemos como usar uma norma de limite (boundary norm) para colorir os segmentos de linha.

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ê.

Importar Bibliotecas

Começaremos importando as bibliotecas necessárias para este laboratório. Importaremos matplotlib.pyplot e numpy.

import matplotlib.pyplot as plt
import numpy as np

Criar Dados

Criaremos um array numpy x contendo 500 valores espaçados uniformemente entre 0 e 3π. Também criaremos outro array numpy y contendo o seno dos valores em x. Finalmente, criaremos um array numpy dydx contendo a primeira derivada de y.

x = np.linspace(0, 3 * np.pi, 500)
y = np.sin(x)
dydx = np.cos(0.5 * (x[:-1] + x[1:]))

Criar Segmentos de Linha

Criaremos um conjunto de segmentos de linha para que possamos colori-los individualmente. Usaremos a função numpy concatenate para concatenar dois arrays points[:-1] e points[1:] ao longo do segundo eixo. Em seguida, remodelaremos o array resultante para um array N x 1 x 2 para que possamos empilhar pontos facilmente para obter os segmentos. O array de segmentos para a coleção de linhas precisa ser (número de linhas) x (pontos por linha) x 2 (para x e y).

points = np.array([x, y]).T.reshape(-1, 1, 2)
segments = np.concatenate([points[:-1], points[1:]], axis=1)

Criar uma Norma Contínua

Criaremos uma norma contínua para mapear de pontos de dados para cores. Usaremos a função Normalize de matplotlib.pyplot para normalizar os valores de dydx entre seu mínimo e máximo. Em seguida, usaremos a função LineCollection para criar um conjunto de segmentos de linha e colori-los individualmente com base em sua derivada. Usaremos a função set_array para definir os valores usados para o colormapping.

norm = plt.Normalize(dydx.min(), dydx.max())
lc = LineCollection(segments, cmap='viridis', norm=norm)
lc.set_array(dydx)
lc.set_linewidth(2)

Criar uma Barra de Cores

Criaremos uma barra de cores para mostrar o mapeamento entre as cores e os valores de dydx. Usaremos a função colorbar de matplotlib.pyplot para criar uma barra de cores.

line = plt.gca().add_collection(lc)
plt.colorbar(line)

Usar uma Norma de Limite (Boundary Norm)

Usaremos, em vez disso, uma norma de limite para colorir os segmentos de linha. Criaremos um ListedColormap contendo três cores - vermelho, verde e azul. Em seguida, criaremos um BoundaryNorm com limites -1, -0.5, 0.5 e 1, e o ListedColormap. Usaremos a função set_array para definir os valores usados para o colormapping.

cmap = ListedColormap(['r', 'g', 'b'])
norm = BoundaryNorm([-1, -0.5, 0.5, 1], cmap.N)
lc = LineCollection(segments, cmap=cmap, norm=norm)
lc.set_array(dydx)
lc.set_linewidth(2)

Criar um Subplot

Criaremos um subplot para mostrar os segmentos de linha coloridos. Usaremos a função subplots de matplotlib.pyplot para criar uma grade de subplots 2x1, e os parâmetros sharex e sharey para compartilhar os eixos x e y entre os subplots.

fig, axs = plt.subplots(2, 1, sharex=True, sharey=True)
line = axs[0].add_collection(lc)
fig.colorbar(line, ax=axs[0])

Definir os Limites dos Eixos

Definiremos os limites dos eixos x e y para os subplots.

axs[0].set_xlim(x.min(), x.max())
axs[0].set_ylim(-1.1, 1.1)

Mostrar o Gráfico

Usaremos a função show de matplotlib.pyplot para mostrar o gráfico.

plt.show()

Resumo

Neste laboratório, aprendemos como criar linhas multicoloridas em Matplotlib. Usamos a função LineCollection para criar um conjunto de segmentos de linha e colori-los individualmente com base em sua derivada. Também aprendemos como usar uma norma de limite (boundary norm) para colorir os segmentos de linha. Usamos a função Normalize para normalizar os valores dydx entre seu mínimo e máximo, e a função ListedColormap para criar um mapa de cores com três cores - vermelho, verde e azul. Usamos a função BoundaryNorm para criar uma norma de limite com limites -1, -0.5, 0.5 e 1, e o ListedColormap. Finalmente, usamos a função subplots para criar uma grade de subplots 2x1, e os parâmetros sharex e sharey para compartilhar os eixos x e y entre os subplots. Em seguida, mostramos o gráfico usando a função show.