2016-09-20 3 views
1

私はpyplotを使って大きなベクトルの配列をプロットしようとしています。今私はpos1(t)pos2(t)vec(t)フォーム([a,...,z],[a1,...,z1])のタプルを返す関数です Pythonでベクトルの配列をプロットする(pyplot)

import matplotlib.pyplot as plt 
import numpy as np 
import operator 

t = np.arange(0, np.pi, .01) 


def pos1(t): 
    x1 = .72 * np.cos(13*t) 
    y1 = .72 * np.sin(13*t) 
    return x1, y1 


def pos2(t): 
    x2 = np.cos(8*t) 
    y2 = np.sin(8*t) 
    return x2, y2 


def vec(t): 
    x1 = pos1(t)[0] 
    x2 = pos2(t)[0] 
    y1 = pos1(t)[1] 
    y2 = pos2(t)[1] 
    x = np.subtract(x1, x2) 
    y = np.subtract(y1, y2) 
    return x, y 


X = pos2(t)[0] 
Y = pos2(t)[1] 
U = vec(t)[0] 
V = vec(t)[1] 

plot1 = plt.figure() 
plt.quiver(X, Y, U, V, headlength=4) 
plt.show(plot1) 

を持っています。

このプロットは、私が望むものに近いものを与えますが、ベクターの長さはすべて間違っています。 2つの関数pos1(t),pos2(t)は、特定の曲線上の点のタプルを返します。そして、vec(t)関数は、その差です。最初の曲線上の点から2番目の曲線上の点までのベクトルにつながります。私のプロットは正しい方向を持っていますが、大きさはありません。

enter image description here

quiver
+0

「pos2」と「vec」が何であるかを教えない限り、私たちはあなたを助けることは不可能です。また、あなたの期待される出力が何であるか教えてください。最後に、スニペットにタイプミスがありますか?それは 'X = pos1(t)'とされていますか? 'pos1'はあなたのスニペットのどこにでも参照されていません。 – Praveen

+0

私は全体を含めるために投稿を編集しました。私が得ようとしている出力は、t1の位置にあったpos1からpos2までのすべての距離ベクトルvec(t)のプロットです。 – Astrum

+0

あなたのコードはあなたのためではなく、あなたが得たいものです。サンプルは異なる出力を生成するためです。私は本当にこののアニメートバージョンをしたい – DJV

答えて

1

矢印の長さを扱います。 quiverは必要なものではないようです。定期plotを使用して

import numpy as np 
import matplotlib.pyplot as plt 


t = np.arange(0, 2 * np.pi, 0.01) 
x0 = np.sin(8 * t) 
y0 = np.cos(8 * t) 
x1 = 0.72 * np.sin(13 * t) 
y1 = 0.72 * np.cos(13 * t) 

data = np.column_stack((x0, x1, y0, y1)).reshape(-1, 2) 

plt.plot(*data, color='black') 
plt.gca().set_aspect('equal', adjustable='box') 
plt.show() 

結果:

Result オリジナル:

Original

+0

「data = np.stack((x0、x1、y0、y1))」という行とはどのくらい正確に一致しますか?T.reshape(-1、2)配列を最初の引数と組み合わせていますが、T.reshape(-1,2)はどうでしょうか? – Astrum

+0

''行 "の2要素で' reshape(-1、2) '" groups "(-1は"行の数 "を計算できない、"他のものに基づいてこの次元を計算する "と言う)。もし 'T'演算を行わなければ、変形は' x0'配列全体を反復し、次に 'x1'、...全体を通して繰り返されます。結果の配列は間違っています:' [[x0 [0]、x0 [1]]、 [x0 [2]、x0 [3]]、...] 'である。 '[x0 [0]、x1 [0]]、[y0 [0]、y1 [0]]、[x0 [1]、x1 [1]のように、 ]、[y0 [1]、y1 [1]]] 'である。これは 'plot'にフィードしたい正しいデータです。 – DJV

+0

'column_stack'を使うように変更しました。それはおそらく明らかです。 – DJV

関連する問題