Gráfico de aljavas
Um gráfico de aljavas é um tipo de gráfico 2D que mostra linhas vetoriais como setas. Os gráficos com setas são úteis na Engenharia Elétrica para visualizar o potencial elétrico e útil na Engenharia Mecânica para mostrar gradientes de tensão.
» Gráfico de aljavas com uma seta
Primeiro, criaremos um gráfico de aljavas simples que contém uma seta para demonstrar como o método quiver()
da biblioteca Matplotlib funciona. O método quiver()
usa quatro argumentos posicionais:
Exemplo Python
ax.quiver(x_pos, y_pos, x_direct, y_direct)
x_pos
e y_pos
são as posições iniciais da seta e x_direct
, y_direct
são as direções da seta (pra onde a seta aponta).
Nosso primeiro gráfico contém uma seta no ponto inicial x_pos = 0
, y_pos = 0
. A direção da flecha está apontando para cima e para a direita x_direct = 1
, y_direct = 1
.
O exemplo de código a baixo cria um gráfico de aljavas com apenas uma seta.
Exemplo Python
import numpy as np
import matplotlib.pyplot as plt
# se estiver usando o Jypyter notebook, use:
# %matplotlib inline
fig, ax = plt.subplots()
x_pos = 0
y_pos = 0
x_direct = 1
y_direct = 1
ax.quiver(x_pos, y_pos, x_direct, y_direct)
ax.set_title('Gráfico de aljavas com uma seta')
plt.show()
Executando o código acima o seu gráfico deve esta assim:
Nesse exemplo o gráfico de aljava contém uma seta. A seta começa no ponto 0, 0 e termina no ponto 1, 1.
» Gráfico de aljavas com duas setas
Agora vamos adicionar uma segunda seta ao gráfico de aljava passando em dois pontos de partida e duas direções de seta.
Manteremos nossa posição inicial da seta original na origem 0,0 e apontando para cima e para a direita (na direção 1,1). Definiremos uma segunda seta com uma posição inicial de -0,5,0,5, que aponta diretamente para baixo (na direção 0, -1).
Um argumento de palavra-chave adicional para adicionar o método quiver()
é scale=5
. Incluir o parâmetro scale=5
dimensiona o comprimento das setas, para que as setas pareçam mais longas e apareçam melhor no gráfico de aljava.
Para ver o início e o fim de ambas as setas, definiremos os limites do eixo entre -1,5 e 1,5 usando o método ax.axis()
e passaremos uma lista dos limites do eixo no formato [xmin, xmax, ymin, ymax] .
Executando o exemplo abaixo, podemos ver duas setas. Uma seta aponta para o canto superior direito e a outra seta aponta para baixo.
Exemplo Python
import numpy as np
import matplotlib.pyplot as plt
# se estiver usando o Jypyter notebook, use:
# %matplotlib inline
fig, ax = plt.subplots()
x_pos = [0, 0]
y_pos = [0, 0]
x_direct = [1, 0]
y_direct = [1, -1]
ax.quiver(x_pos, y_pos, x_direct, y_direct, scale=5)
ax.axis([-1.5, 1.5, -1.5, 1.5])
plt.show()
Nesse exemplo podemos ver um gráfico com duas setas. Ambas as setas começam no ponto 0,0. Uma seta aponta para o canto superior direito, a outra seta aponta para baixo.
» Gráfico de aljavas usando uma grade de malha
Um gráfico de aljava com duas setas é um bom começo, mas é entediante e repetitivo adicionar as flechas de aljava uma a uma. Para criar uma superfície 2D completa de setas, utilizaremos a função meshgrid()
da biblioteca NumPy.
Primeiro, precisamos criar um conjunto de matrizes que denotem as posições iniciais x e y de cada seta no gráfico. As matrizes da posição inicial da seta serão denominadas X e Y.
Podemos usar as posições iniciais da seta x, y para definir os componentes x e y de cada direção da seta. Chamaremos a direção da seta u e v. Para esse gráfico, definiremos a direção da seta com base no ponto inicial da seta da aljava usando as equações abaixo.
Xdireção = COS(Xposição_inicial)
Ydireção = SIN(Yposição_inicial)
A seção de código abaixo cria as matrizes das posições X e Y usando a função np.meshgrid()
da biblioteca NumPy.
Exemplo Python
import numpy as np
import matplotlib.pyplot as plt
# se estiver usando o Jypyter notebook, use:
# %matplotlib inline
x = np.arange(0,2.2,0.2)
y = np.arange(0,2.2,0.2)
X, Y = np.meshgrid(x, y)
u = np.cos(X) * Y
v = np.sin(y) * Y
Em seguida, podemos construir o gráfico de aljava usando o método quiver()
do Matplotlib. Lembre-se de que o método quiver()
aceita quatro argumentos posicionais:
ax.quiver(x_pos, y_pos, x_direct, y_direct)
Nesse gráfico de aljava, x_pos
e y_pos
são matrizes 2D que contêm as posições iniciais das setas e x_direct
, y_direct
são matrizes 2D que contêm as direções das setas.
Os comandos ax.xaxis.set_ticks([])
e ax.yaxis.set_ticks([])
remove as marcas de seleção do eixo e ax.set_aspect('equal')
define a proporção da plotagem para 1:1.
Exemplo Python
fig, ax = plt.subplots(figsize=(7,7))
ax.quiver(X,Y,u,v)
ax.xaxis.set_ticks([])
ax.yaxis.set_ticks([])
ax.axis([-0.2, 2.3, -0.2, 2.3])
ax.set_aspect('equal')
plt.show()
Agora vamos construir outro gráfico de aljava em que os componentes Î e ĵ (a direção) das setas de força, ⃗F dependem do ponto inicial da seta x, y de acordo com a função:
Novamente, usaremos a função meshgrid()
do NumPy para criar as matrizes da posição inicial da seta e aplicar nossa função ⃗F às matrizes do ponto inicial da seta X e Y.
Exemplo Python
import numpy as np
import matplotlib.pyplot as plt
# se estiver usando o Jupyter notebook, use:
# %matplotlib inline
x = np.arange(-1,1,0.1)
y = np.arange(-1,1,0.1)
X, Y = np.meshgrid(x, y)
u = np.cos(X)*Y
v = np.sin(Y)*Y
X,Y = np.meshgrid(x,y)
u = X/5
v = -Y/5
fig, ax = plt.subplots(figsize=(9,9))
ax.quiver(X,Y,u,v)
ax.xaxis.set_ticks([])
ax.yaxis.set_ticks([])
ax.set_aspect('equal')
plt.show()