【问题标题】:Colormap by vector direction in python using quiver使用 quiver 在 python 中按矢量方向的颜色图
【发布时间】: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


【解决方案1】:

按照建议使用np.arctan2(V,U) 函数来计算您的颜色值。要返回独特的颜色,请使用不同的颜色图,“Blues”只能返回不同深浅的蓝色。像“hsv”这样的循环颜色图更合适。请尝试以下操作:

q = plt.quiver(x_dat, y_dat, vx_dat, vy_dat, np.arctan2(vy_dat, vx_dat), units='dots', angles='xy', cmap = 'hsv')

【讨论】:

    猜你喜欢
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    相关资源
    最近更新 更多