2016-06-08 85 views
2

自己沒有運氣,我正在尋找一些我遇到的問題的幫助。散點上的箭頭

我有這種格式的CSV數據。

Flow Amount,X_Start,Y_Start,X_End,Y_End 
4,36.20740741,31.97407407,48.103125,9.4125 
4,50.71851852,48.46666667,65.65714286,73.81785714 
3,50.71851852,48.46666667,48.103125,9.4125 
3,48.103125,9.4125,62.14642857,22.55357143 
2,31.976,71.308,40.19210526,88.43157895 
1,56.98888889,48.18333333,36.20740741,31.97407407 
1,56.98888889,48.18333333,50.71851852,48.46666667 
0,46.65686275,72.46470588,48.103125,9.4125 
0,65.65714286,73.81785714,12.18333333,55.78333333 

我期待從點(X_Start,Y_Start)到點時(x_end,Y_End),在結束點的箭頭畫出箭頭到我的散射。

我還想根據第1列[Flow]更改箭頭的重量,顯示較粗的一行,數字越大。

我創建了一個除了箭頭和箭頭效果之外的所有圖形,我期望實現的效果與截圖中的效果非常相似。

enter image description here

我看着plt.quiver()但只需要1分,所以我正在尋找一個有效的變通方法,同時通過CSV數據我環路這些箭頭添加到我的陰謀。

我會感謝任何解決方案的想法。

+0

也許'PLT。 annotate()'是你需要的:http://matplotlib.org/users/annotations_intro.html –

+0

是否可以繪製一個開始點和結束點來獲得正確的箭頭長度?沒有看到任何建議。 – FootyStattowannab3

+0

是的,你只需將'xy'設置爲開始,'xytext'即可。只需將文本保留爲空白字符串即可。 –

回答

0

您可以使用 '箭頭' 繪製箭頭,喜歡這裏:

import numpy as np 
from matplotlib import pyplot as plt 

data = np.genfromtxt('file1.dat', delimiter=',', skip_header=1, names=['MAG', 'X0', 'Y0','X1','Y1']) 
plt.scatter(data['X0'], data['Y0'], color='r', zorder=10) 
plt.scatter(data['X1'], data['Y1'], color='r', zorder=10) 

for d in data: 
    if(d['MAG'] > 0): 
     plt.arrow(d['X0'],d['Y0'],d['X1']-d['X0'], d['Y1']-d['Y0'], 
     shape='full', color='b', lw=d['MAG']/2., length_includes_head=True, 
     zorder=0, head_length=3., head_width=1.5) 

plt.show() 

enter image description here

你有另一種使用FancyArrow,喜歡這裏:

for d in data: 
    if(d['MAG'] > 0): 
     ar = patches.FancyArrow(d['X0'],d['Y0'],d['X1']-d['X0'], d['Y1']-d['Y0'], width=d['MAG']/4., 
     head_width=3., head_length=1.54, length_includes_head=True, zorder = 0) 
     plt.gca().add_patch(ar)