我使用matplotlib streamplot时遇到问题。我想使用存储在numpy数组中的坐标(x,y,z)中的3d矢量场,并使用streamplot绘制它的切片。
为了测试它,我想使用一个向量字段,其中箭头指向z> 0区域,并指向z <0区域。
所以我尝试了这个:
import numpy as np
import matplotlib.pyplot as plt
from math import *
max = 100
min = -100
X = np.linspace(min, max, num=100)
Y = np.linspace(min, max, num=100)
Z = np.linspace(min, max, num=100)
N = X.size
#single components in the 3D matrix
Bxa = np.zeros((N, N, N))
Bya = np.zeros((N, N, N))
Bza = np.zeros((N, N, N))
for i, x in enumerate(X):
for j, y in enumerate(Y):
for k, z in enumerate(Z):
Bxa[ i, j, k] = 0.0 #x
Bya[ i, j, k] = 0.0 #y
Bza[ i, j, k] = z
#I take a slice close to Y=0
Bx_sec = Bxa[:,N/2,:]
By_sec = Bya[:,N/2,:]
Bz_sec = Bza[:,N/2,:]
fig = plt.figure()
ax = fig.add_subplot(111)
ax.streamplot(X, Z, Bx_sec, Bz_sec, color='b')
ax.set_xlim([X.min(), X.max()])
ax.set_ylim([Z.min(), Z.max()])
plt.show()
但是如果我放了Bza = x,我会得到一些看起来像的东西!我试图颠倒向量的顺序,但它是无用的! 你有谁理解这个问题?感谢
加布里埃尔
答案 0 :(得分:0)
streamplot的文档:
x, y : 1d arrays
an *evenly spaced* grid.
u, v : 2d arrays
x and y-velocities. Number of rows should match length of y, and
the number of columns should match x.
请注意,u和v中的行应与y匹配,列应与x匹配。我认为你的u和v是转置的。
所以我使用了numpy.transpose(),一切正常!