Criar Preenchimentos de Polígonos 3D para Gráficos de Linhas

Beginner

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

Introdução

Neste tutorial, aprenderemos como criar polígonos que preenchem o espaço sob um gráfico de linhas em um gráfico 3D usando a biblioteca Matplotlib do Python. Os polígonos serão semi-transparentes, criando uma espécie de efeito de 'vitral irregular'.

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 as Bibliotecas Necessárias

Começaremos importando as bibliotecas necessárias.

import math
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.collections import PolyCollection

Definir a Função Polígono Sob o Gráfico

Em seguida, definimos uma função polygon_under_graph(x, y) que constrói a lista de vértices que define o polígono preenchendo o espaço sob o gráfico de linhas (x, y). Esta função assume que x está em ordem crescente.

def polygon_under_graph(x, y):
    """
    Construct the vertex list which defines the polygon filling the space under
    the (x, y) line graph. This assumes x is in ascending order.
    """
    return [(x[0], 0.), *zip(x, y), (x[-1], 0.)]

Criar o Gráfico 3D

Agora, criaremos um gráfico 3D usando Matplotlib.

ax = plt.figure().add_subplot(projection='3d')

Definir os Arrays x e lambda

Definimos os arrays x e lambda usando as funções linspace e range, respectivamente.

x = np.linspace(0., 10., 31)
lambdas = range(1, 9)

Calcular os Vértices e as Cores das Faces

Calculamos os vértices e as cores das faces usando as funções vectorize e colormaps do Matplotlib.

## verts[i] is a list of (x, y) pairs defining polygon i.
gamma = np.vectorize(math.gamma)
verts = [polygon_under_graph(x, l**x * np.exp(-l) / gamma(x + 1))
         for l in lambdas]
facecolors = plt.colormaps['viridis_r'](np.linspace(0, 1, len(verts)))

Criar os Polígonos e Adicionar ao Gráfico

Criamos os polígonos usando a função PolyCollection do Matplotlib e adicionamos-os ao gráfico.

poly = PolyCollection(verts, facecolors=facecolors, alpha=.7)
ax.add_collection3d(poly, zs=lambdas, zdir='y')

Definir os Limites e Rótulos do Gráfico

Finalmente, definimos os limites e rótulos do gráfico usando a função set.

ax.set(xlim=(0, 10), ylim=(1, 9), zlim=(0, 0.35),
       xlabel='x', ylabel=r'$\lambda$', zlabel='probability')

Mostrar o Gráfico

Exibimos o gráfico usando a função show.

plt.show()

Resumo

Neste tutorial, aprendemos como criar polígonos que preenchem o espaço sob um gráfico de linhas em um gráfico 3D usando a biblioteca Matplotlib do Python. Usamos a função PolyCollection para criar os polígonos e definimos os limites e rótulos do gráfico usando a função set.