绘制矢量场

时间:2016-02-12 08:57:59

标签: python vector multiple-columns

我有一个数据文件,分为4列,第一个和第二个用于x和y坐标,第三个和第四个用于x和y位置的矢量场的x和y分量(相同线)。 x和y的间距相等。

我想用" quiver"来形象化矢量场。用矢量的范数绘制,用作地图来为矢量着色。我不知道是否有可能降低网格上的点密度以更好地看到向量?

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.pyplot import cm
from numpy import *
from pylab import *

x, y, fx, fy = np.genfromtxt(r'vecfield.dat', unpack=True)

norm = np.sqrt(fx**2+fy**2)
xx = linspace(min(x), max(x), num=150)
yy = linspace(min(y), max(y), num=10)
X, Y = mgrid(xx, yy)

q = plt.quiver(X, Y, fx, fy, norm, cmap=cm.jet, angles='xy', scale=1)
plt.axis()
plt.show()

提前感谢您的帮助。

这是我约会的样本:

0.00 0.00 0.000 0.000 0.000
0.00 0.50 -0.502 -0.008 0.503
0.00 1.00 -0.012 -0.005 3.836
0.00 1.50 -0.067 -0.005 5.080
0.00 2.00 0.085 -0.010 3.631
0.00 2.50 0.172 -0.006 5.079
0.00 3.00 0.191 0.001 4.646
0.00 3.50 0.290 -0.022 4.579
0.00 4.00 0.202 -0.006 4.993
0.00 4.50 0.096 0.010 4.836
0.00 5.00 0.623 -0.022 5.079
0.00 5.50 0.463 -0.002 4.422
0.00 6.00 -0.473 0.005 3.943
0.00 6.50 0.064 0.004 4.466
0.00 7.00 0.097 -0.008 5.203
0.00 7.50 -0.079 0.005 4.342
0.00 8.00 -0.369 0.009 4.491
0.00 8.50 -0.517 -0.043 5.564
0.00 9.00 -0.044 -0.054 5.036
0.00 9.50 -0.111 -0.037 5.482
0.00 10.00 0.358 -0.027 6.038
0.00 10.50 0.150 -0.037 5.570
0.00 11.00 0.091 -0.010 4.989
0.00 11.50 0.040 0.006 4.712
0.00 12.00 -0.737 -0.004 4.976
0.00 12.50 -0.661 -0.017 5.867
0.00 13.00 -0.047 -0.053 5.292
0.00 13.50 0.124 -0.095 4.988
0.00 14.00 -0.048 -0.146 5.646
0.00 14.50 0.271 -0.097 5.450
0.00 15.00 0.645 0.080 4.688
0.00 15.50 0.243 0.012 5.192
0.00 16.00 -0.245 0.007 4.699
0.00 16.50 0.437 -0.125 5.038
0.00 17.00 0.211 -0.282 6.002
0.00 17.50 0.175 -0.147 4.767
0.00 18.00 0.816 -0.177 2.794
0.00 18.50 0.131 -0.031 0.615
0.00 19.00 0.000 0.000 0.000
0.00 19.50 0.000 0.000 0.000
0.00 20.00 0.000 0.000 0.000
0.00 20.50 0.000 0.000 0.000
0.00 21.00 0.000 0.000 0.000

2 个答案:

答案 0 :(得分:0)

我没有任何样本数据,所以很难测试,但我认为你的问题在于设置mgrid数组。这应该有效:

X, Y = mgrid[min(x):(max(x)+1), min(y):(max(y)+1)]

答案 1 :(得分:0)

@NoelSegura是完全正确的,你不需要网格。然而,要从数据中获得有意义的图,我必须缩放fy矢量数据:

fy = fy/100
norm = np.sqrt(fx**2+fy**2)
q = plt.quiver(x, y, fx, fy, norm, cmap=cm.jet, angles='xy', scale=1)
plt.axis()
plt.show()
相关问题