2016-06-08 48 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)