【发布时间】:2017-02-28 13:31:45
【问题描述】:
我正在尝试在 python 2.7 中使用 quiver 按方向对向量进行颜色映射。我从文本文件中读取数据,获取每个向量的角度并进行归一化,以使所有内容都落在 [0,1] 之间。但是,当我去绘制颜色时,会发现相同的颜色表示两个不同的方向。
另外,我没有在网格上绘制数据,而是将数据绘制为具有速度矢量的点,这可能是相关的。这是我的代码:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as col
import sys
data = np.loadtxt("" + str(sys.argv[1]) + "")
x_dat = data[:,0]
y_dat = data[:,1]
vx_dat = data[:,2]
vy_dat = data[:,3]
rad = np.arctan(vy_dat/vx_dat) * 2
theta = np.degrees(rad)
for i in range(len(theta)):
if theta[i] < 0:
theta[i] += 360
theta[i] /= 360
我意识到我不需要转换为度数。然后我规范化我的向量:
N = np.array([])
for i in range(len(vx_dat)):
N = np.append(N,np.sqrt(vx_dat[i]**2 + vy_dat[i]**2))
vx_dat[i] = vx_dat[i]/N[i]
vy_dat[i] = vy_dat[i]/N[i]
最后,我绘制了它:
q = plt.quiver(x_dat, y_dat, vx_dat, vy_dat, theta, units='dots', angles='xy', cmap = 'Blues')
“theta”应根据方向映射每个向量的颜色。然而,这是我得到的(我放大了,所以更容易看到):
我该如何解决这个问题,以便每个方向都有一个唯一颜色?
【问题讨论】:
-
Pi周期性的tan函数;因此,您会在整个圆圈内得到两个方向,它们共享相同的颜色(彼此相反的方向)。你需要的是arctan2 function,(
numpy.arctan2,它在整个圆上给出了独特的角度。 -
非常感谢!我的一个愚蠢的疏忽。
标签: python python-2.7 matplotlib