所以我在这里找到了两个类似的问题:
第一个问题涉及不同大小的数组(这不是我的情况,X,Y,U和V在我的例子中将始终具有相同的长度)而第二个问题提供了一些更多的进展变得难以理解在问题中并没有提供解决方案。
转到我的问题,我有4个一维数组,每个向量所在的X坐标和Y坐标,然后是每个向量的相应U和V值。我试图将矢量场(我可以在.quiver中正确显示)可视化为使用streamplot的流线可视化,但我遇到了制作U和V 2D的问题。我不完全理解U和V需要包含的第二个维度,所以任何澄清(理想情况下代码都很棒)。
我能提供的唯一代码是我对第二个链接的实现,但这对我不起作用,所以会很有用。
答案 0 :(得分:2)
Use griddata(另请参阅scipy.interpolate.griddata
)将1D数据插入到2D网格中。
import numpy as np
import matplotlib.pyplot as plt
import scipy.interpolate as interpolate
# lowercase variables are 1D arrays
x = np.linspace(0, 2 * np.pi, 10)
y = np.sin(x)
u = np.cos(x)
v = np.sin(x)
# capitalized variables are 2D arrays
xi = np.linspace(x.min(), x.max(), 100)
yi = np.linspace(y.min(), y.max(), 100)
X, Y = np.meshgrid(xi, yi)
U = interpolate.griddata((x, y), u, (X, Y), method='cubic')
V = interpolate.griddata((x, y), v, (X, Y), method='cubic')
plt.figure()
plt.quiver(x, y, u, v, scale_units='xy', angles='xy', scale=1.5)
plt.streamplot(X, Y, U, V, color=U**2+V**2, linewidth=2, cmap=plt.cm.autumn)
plt.show()
import numpy as np
import matplotlib.pyplot as plt
import scipy.interpolate as interpolate
# lowercase variables are 1D arrays
x = np.array([1,2,3,4,5])
y = np.array([3,1,5,1,3])
u = np.array([1,1,0,-1,-1])
v = np.array([-0.5,1,-1,1,-0.5])
# capitalized variables are 2D arrays
xi = np.linspace(x.min(), x.max(), 100)
yi = np.linspace(y.min(), y.max(), 100)
X, Y = np.meshgrid(xi, yi)
U = interpolate.griddata((x, y), u, (X, Y), method='nearest')
V = interpolate.griddata((x, y), v, (X, Y), method='nearest')
plt.figure()
plt.quiver(x, y, u, v, scale_units='xy', angles='xy', scale=1.5)
plt.streamplot(X, Y, U, V, color=U**2+V**2, linewidth=2, cmap=plt.cm.autumn)
plt.show()
产量