2017-02-28 16 views
0

私は、方向性を持つベクトルを、quiverを使って、python 2.7でカラーマップしようとしています。テキストファイルからデータを読み込み、各ベクトルの角度を取得し、すべてが[0,1]の間に収まるように正規化します。しかし、色をプロットすると、同じ色が2つの異なる方向を示すことがわかります。パイロットでベクトル方向にカラーマップを使用する

また、データをメッシュ上にプロットするのではなく、速度ベクトルを持つ点としてプロットすることが適切かもしれません。ここに私のコード:

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') 

。しかし、ここで(参照しやすくなると思いますので、私はズームアップ)私は何を得るのです。

各方向は ユニークの色を取得するように、私はこの問題を解決するにはどうすればよい

+0

周期的なPiによるtan関数。したがって、同じ色(お互いに反対のもの)を共有する円全体の中で正確に2つの方向を得ることができます。何が必要なの[上記Arctan2機能](https://en.wikipedia.org/wiki/Atan2)で、([ 'numpy.arctan2'](https://docs.scipy.org/doc/numpy/reference/生成された/ numpy.arctan2.html)完全な円の上にユニークな角度を与えます。 – ImportanceOfBeingErnest

+0

ありがとうございました!私の愚かな見落とし。 –

答えて

0

あなたのカラー値を計算するには、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') 
関連する問題