2017-11-23 6 views
0

散布図に一連のダニを印刷したい場合、x点とy点のペアは2つのnx2配列に格納されます。ポイントの対の間に小さな目盛りの代わりに、それはすべてのポイントの間にラインを印刷しています。 n行を作成する必要はありますか?matplotlib複数の2点の線をプロットして結合しない

xs.round(2) 
Out[212]: 
array([[ 555.59, 557.17], 
     [ 867.64, 869. ], 
     [ 581.95, 583.25], 
     [ 822.08, 823.47], 
     [ 198.46, 199.91], 
     [ 887.29, 888.84], 
     [ 308.68, 310.06], 
     [ 340.1 , 341.52], 
     [ 351.68, 353.21], 
     [ 789.45, 790.89]]) 

ys.round(2) 
Out[213]: 
array([[ 737.55, 738.78], 
     [ 404.7 , 406.17], 
     [ 7.17, 8.69], 
     [ 276.72, 278.16], 
     [ 84.71, 86.1 ], 
     [ 311.89, 313.14], 
     [ 615.63, 617.08], 
     [ 653.9 , 655.32], 
     [ 76.33, 77.62], 
     [ 858.54, 859.93]]) 
plt.plot(xs, ys) 

enter image description here

答えて

0

最も簡単な解決策はnラインをプロットする確かです。

import numpy as np 
import matplotlib.pyplot as plt 

xs =np.array([[ 555.59, 557.17], 
     [ 867.64, 869. ], 
     [ 581.95, 583.25], 
     [ 822.08, 823.47], 
     [ 198.46, 199.91], 
     [ 887.29, 888.84], 
     [ 308.68, 310.06], 
     [ 340.1 , 341.52], 
     [ 351.68, 353.21], 
     [ 789.45, 790.89]]) 

ys = np.array([[ 737.55, 738.78], 
     [ 404.7 , 406.17], 
     [ 7.17, 8.69], 
     [ 276.72, 278.16], 
     [ 84.71, 86.1 ], 
     [ 311.89, 313.14], 
     [ 615.63, 617.08], 
     [ 653.9 , 655.32], 
     [ 76.33, 77.62], 
     [ 858.54, 859.93]]) 

for (x,y) in zip(xs,ys): 
    plt.plot(x,y, color="crimson") 

plt.show() 

enter image description here

nが非常に大きい場合は、より効率的なソリューションは、すべての行を表示するために、単一のLineCollectionを使用することです。利点は、nラインプロットの代わりに1つのコレクションだけが使用されるため、これを高速に描画できることです。

# data as above. 
seq = np.concatenate((xs[:,:,np.newaxis],ys[:,:,np.newaxis]), axis=2) 
c= matplotlib.collections.LineCollection(seq) 
plt.gca().add_collection(c) 
plt.gca().autoscale() 

plt.show() 
+0

ありがとう、それは私がしたいと思っているものです。 –

+0

これをアニメーション化するには、目盛りがマーカと共に動くように、LineCollectionのxとyの点を更新するにはどうすればよいですか? –

+0

経由で 'c.set_offsets(new_seq)'。 – ImportanceOfBeingErnest

0

あなたは配列xsysのエンドポイントを反復処理する必要があります。

import matplotlib.pyplot as plt 
import numpy as np 

xs = np.array([[ 555.59, 557.17], 
     [ 867.64, 869. ], 
     [ 581.95, 583.25], 
     [ 822.08, 823.47], 
     [ 198.46, 199.91], 
     [ 887.29, 888.84], 
     [ 308.68, 310.06], 
     [ 340.1 , 341.52], 
     [ 351.68, 353.21], 
     [ 789.45, 790.89]]) 


ys = np.array([[ 737.55, 738.78], 
     [ 404.7 , 406.17], 
     [ 7.17, 8.69], 
     [ 276.72, 278.16], 
     [ 84.71, 86.1 ], 
     [ 311.89, 313.14], 
     [ 615.63, 617.08], 
     [ 653.9 , 655.32], 
     [ 76.33, 77.62], 
     [ 858.54, 859.93]]) 

for segment in zip(xs, ys): 
    plt.plot(segment) 

plt.show() 

enter image description here

関連する問題