Criar Streamplot com Matplotlib em Python

Beginner

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

Introdução

Este tutorial irá guiá-lo através do processo de criação de um streamplot usando Matplotlib em Python. Um streamplot é um campo vetorial 2D que exibe um conjunto de linhas de corrente (streamlines). Ele é usado para visualizar o fluxo de fluidos e outros campos vetoriais. Neste tutorial, mostraremos como criar um streamplot com densidade, cor e largura de linha variáveis, além de controlar os pontos de partida das linhas de corrente.

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 às limitações do 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

Antes de começar, precisamos importar as bibliotecas necessárias. Neste tutorial, usaremos as bibliotecas Numpy e Matplotlib. Numpy é usado para operações numéricas e Matplotlib é usado para visualização de dados.

import matplotlib.pyplot as plt
import numpy as np

Criar Dados

Criaremos os dados para nosso streamplot usando a biblioteca Numpy. Neste exemplo, criaremos uma meshgrid com 100 pontos em ambas as direções e calcularemos os componentes U e V do nosso campo vetorial.

w = 3
Y, X = np.mgrid[-w:w:100j, -w:w:100j]
U = -1 - X**2 + Y
V = 1 + X - Y**2
speed = np.sqrt(U**2 + V**2)

Densidade Variável

Nesta etapa, criaremos um streamplot com densidade variável. O parâmetro density controla o número de linhas de fluxo (streamlines) a serem plotadas. Valores mais altos resultarão em mais linhas de fluxo.

plt.streamplot(X, Y, U, V, density=[0.5, 1])
plt.title('Varying Density')
plt.show()

Cor Variável

Nesta etapa, criaremos um streamplot com cor variável. O parâmetro color recebe um array 2D que representa a magnitude do campo vetorial. Aqui, estamos usando o componente U do campo vetorial como a cor.

strm = plt.streamplot(X, Y, U, V, color=U, linewidth=2, cmap='autumn')
plt.colorbar(strm.lines)
plt.title('Varying Color')
plt.show()

Largura da Linha Variável

Nesta etapa, criaremos um streamplot com largura de linha variável. O parâmetro linewidth controla a largura das linhas de fluxo (streamlines). Aqui, estamos usando o array speed que calculamos anteriormente para variar a largura da linha.

lw = 5*speed / speed.max()
plt.streamplot(X, Y, U, V, density=0.6, color='k', linewidth=lw)
plt.title('Varying Line Width')
plt.show()

Controlando Pontos de Partida

Nesta etapa, criaremos um streamplot com pontos de partida controlados. O parâmetro start_points recebe um array 2D que representa os pontos de partida das linhas de fluxo (streamlines).

seed_points = np.array([[-2, -1, 0, 1, 2, -1], [-2, -1, 0, 1, 2, 2]])

strm = plt.streamplot(X, Y, U, V, color=U, linewidth=2,
                      cmap='autumn', start_points=seed_points.T)
plt.colorbar(strm.lines)
plt.title('Controlling Starting Points')
plt.plot(seed_points[0], seed_points[1], 'bo')
plt.xlim(-w, w)
plt.ylim(-w, w)
plt.show()

Streamplot com Máscara

Nesta etapa, criaremos um streamplot com mascaramento (masking). Criaremos uma máscara e a aplicaremos ao componente U do nosso campo vetorial. A região mascarada será ignorada pelas linhas de fluxo (streamlines).

mask = np.zeros(U.shape, dtype=bool)
mask[40:60, 40:60] = True
U[:20, :20] = np.nan
U = np.ma.array(U, mask=mask)

plt.streamplot(X, Y, U, V, color='r')
plt.title('Streamplot with Masking')
plt.imshow(~mask, extent=(-w, w, -w, w), alpha=0.5, cmap='gray', aspect='auto')
plt.gca().set_aspect('equal')
plt.show()

Linhas de Fluxo (Streamlines) Contínuas

Nesta etapa, criaremos um streamplot com linhas de fluxo contínuas. O parâmetro broken_streamlines controla se as linhas de fluxo devem ser interrompidas quando excedem o limite de linhas dentro de uma única célula da grade.

plt.streamplot(X, Y, U, V, broken_streamlines=False)
plt.title('Streamplot with Unbroken Streamlines')
plt.show()

Resumo

Neste tutorial, aprendemos como criar um streamplot usando Matplotlib em Python. Cobrimos vários parâmetros da função streamplot, incluindo variação de densidade, cor e largura da linha. Também aprendemos como controlar os pontos de partida das linhas de fluxo (streamlines), aplicar máscaras e plotar linhas de fluxo contínuas.