Diagrama de aljaba en Matplotlib

El diagrama de carcaj es básicamente un tipo de diagrama 2D que muestra líneas vectoriales como flechas. Este tipo de gráficos son útiles en ingenieros eléctricos para visualizar el potencial eléctrico y mostrar gradientes de tensión en ingeniería mecánica.
 

Creación de un diagrama de aljaba

Comencemos a crear un diagrama de carcaj simple que contenga una flecha que explique cómo funciona la función ax.quiver() de Matplotlib. La función ax.quiver() toma cuatro argumentos: 

Sintaxis: 

ax.quiver(x_pos, y_pos, x_dir, y_dir, color) 

Aquí x_pos y y_pos son las posiciones iniciales de la flecha, mientras que x_dir y y_dir son las direcciones de la flecha. 
La siguiente gráfica contiene una flecha de carcaza que comienza en x_pos = 0 y y_pos = 0. La dirección de la flecha apunta hacia arriba y hacia la derecha en x_dir = 1 y y_dir = 1.

Ejemplo:  

Python3

# Import libraries
import numpy as np
import matplotlib.pyplot as plt
 
 
# Creating arrow
x_pos = 0
y_pos = 0
x_direct = 1
y_direct = 1
 
# Creating plot
fig, ax = plt.subplots(figsize = (12, 7))
ax.quiver(x_pos, y_pos, x_direct, y_direct)
ax.set_title('Quiver plot with one arrow')
 
# Show plot
plt.show()

Producción : 

Carcaj Parcela con dos flechas

Agreguemos otra flecha al gráfico que pase por dos puntos de inicio y dos direcciones. Manteniendo la flecha original que comienza en el origen (0, 0) y apunta hacia arriba y en la dirección correcta (1, 1), y crea la segunda flecha que comienza en (0, 0) apuntando hacia abajo en la dirección (0, -1) .Para ver claramente el punto inicial y final, estableceremos los límites de los ejes en [-1.5, 1.5] usando el método ax.axis() y pasando los argumentos en forma de [x_min, x_max, y_max, y_min] . Al agregar un argumento adicional scale=value al método ax.quiver(), podemos administrar las longitudes de las flechas para que se vean más largas y se muestren mejor en la gráfica.

Ejemplo:  

Python3

# Import libraries
import numpy as np
import matplotlib.pyplot as plt
 
 
# Creating arrow
x_pos = [0, 0]
y_pos = [0, 0]
x_direct = [1, 0]
y_direct = [1, -1]
 
# Creating plot
fig, ax = plt.subplots(figsize = (12, 7))
ax.quiver(x_pos, y_pos, x_direct, y_direct,
         scale = 5)
 
ax.axis([-1.5, 1.5, -1.5, 1.5])
 
# show plot
plt.show()

Producción : 
 

Parcela de aljaba usando meshgrid

Un diagrama de carcaj que contiene dos flechas es un buen comienzo, pero es demasiado lento y demasiado largo para agregar flechas al diagrama de carcaj uno por uno. Entonces, para crear una superficie de flechas completamente 2D, usaremos el método meshgrid() de Numpy. Primero, cree un conjunto de arrays denominadas X e Y que representen las posiciones iniciales de x e y respectivamente de cada flecha en el diagrama de carcaj. Las posiciones iniciales de las flechas x, y también se pueden usar para definir los componentes xey de cada dirección de flecha. En la siguiente gráfica, u y v denotan la array de direcciones de las flechas del carcaj y definiremos la dirección de la flecha en función del punto de inicio de la flecha utilizando las siguientes ecuaciones: 

x_{direction} = cos(x_{starting \ point})
y_{direction} = sin(y_{starting \ point})

Ejemplo:  

Python3

# Import libraries
import numpy as np
import matplotlib.pyplot as plt
 
 
# Creating arrow
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
 
# creating plot
fig, ax = plt.subplots(figsize =(14, 8))
ax.quiver(X, Y, u, v)
 
ax.xaxis.set_ticks([])
ax.yaxis.set_ticks([])
ax.axis([-0.3, 2.3, -0.3, 2.3])
ax.set_aspect('equal')
 
# show plot
plt.show()

Producción : 
 

Carcaj Graficar usando gradiente

Vamos a crear un diagrama de carcaj que muestre la función de gradiente. El método np, gradient() de Numpy se puede usar para aplicar la función de gradiente a la posición inicial x, y de cada flecha. La ecuación se utiliza para crear la siguiente gráfica:

z = xe^{-x^2-y^2}

Ejemplo: 

Python3

# Import libraries
import numpy as np
import matplotlib.pyplot as plt
 
 
# Creating arrows
x = np.arange(-2, 2.2, 0.2)
y = np.arange(-2, 2.2, 0.2)
 
# Creating gradient
X, Y = np.meshgrid(x, y)
z = X * np.exp(-X**2-Y**2)
dx, dy = np.gradient(z)
 
# Creating plot
fig, ax = plt.subplots(figsize =(9, 9))
ax.quiver(X, Y, dx, dy)
 
ax.xaxis.set_ticks([])
ax.yaxis.set_ticks([])
ax.set_aspect('equal')
 
# show plot
plt.show()

Producción : 
 

Parcela de carcaj para colorear

El método ax.quiver() de la biblioteca matplotlib de python proporciona un color de atributo opcional que especifica el color de la flecha. El atributo de color del carcaj requiere las mismas dimensiones que las arrays de posición y dirección. 

A continuación se muestra el código que modifica los diagramas de carcaj que hicimos anteriormente:

Ejemplo 1: 

Python3

# Import libraries
import numpy as np
import matplotlib.pyplot as plt
 
# Defining subplots
fig, (ax1, ax2) = plt.subplots(1, 2, figsize =(14, 8))
 
 
# first subplot
# Creating arrows
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
n = -2
 
# Defining color
color = np.sqrt(((v-n)/2)*2 + ((u-n)/2)*2)
 
# Creating plot
ax1.quiver(X, Y, u, v, color, alpha = 0.8)
ax1.xaxis.set_ticks([])
ax1.yaxis.set_ticks([])
ax1.axis([-0.2, 2.3, -0.2, 2.3])
ax1.set_aspect('equal')
ax1.set_title('meshgrid function')
 
# second subplot
# Creating arrows
x = np.arange(-2, 2.2, 0.2)
y = np.arange(-2, 2.2, 0.2)
X, Y = np.meshgrid(x, y)
z = X * np.exp(-X**2 -Y**2)
dx, dy = np.gradient(z)
n = -2
 
# Defining color
color = np.sqrt(((dx-n)/2)*2 + ((dy-n)/2)*2)
 
# Creating plot
ax2.quiver(X, Y, dx, dy, color)
ax2.xaxis.set_ticks([])
ax2.yaxis.set_ticks([])
ax2.set_aspect('equal')
ax2.set_title('gradient')
 
 
# show figure
plt.tight_layout()
plt.show()

Producción : 
 

Ejemplo 2: Construcción de un diagrama de función de aljaba  \vec{F}   que define el campo 2D que tiene cuatro vértices como se muestra en el siguiente diagrama:
\vec{F} = sin(x)cos(y) \ \hat{i} -cos(x)sin(y) \ \hat{j}

Python3

# Import libraries
import numpy as np
import matplotlib.pyplot as plt
 
# Creating arrow
x = np.arange(0, 2 * np.pi + 2 * np.pi / 20,
              2 * np.pi / 20)
y = np.arange(0, 2 * np.pi + 2 * np.pi / 20,
              2 * np.pi / 20)
 
X, Y = np.meshgrid(x, y)
 
u = np.sin(X)*np.cos(Y)
v = -np.cos(X)*np.sin(Y)
 
# Defining color
color = np.sqrt(((dx-n)/2)*2 + ((dy-n)/2)*2)
 
# Creating plot
fig, ax = plt.subplots(figsize =(14, 9))
ax.quiver(X, Y, u, v, color, alpha = 1)
 
ax.xaxis.set_ticks([])
ax.yaxis.set_ticks([])
ax.axis([0, 2 * np.pi, 0, 2 * np.pi])
ax.set_aspect('equal')
 
# show plot
plt.show()

Producción : 
 

Publicación traducida automáticamente

Artículo escrito por jeeteshgavande30 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *