我自己没有运气,我正在寻找一些帮助解决我遇到的这个问题。
我有这种格式的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]显示更粗的线来改变箭头的重量,数字越大。
我创建了一个除了箭头之外的所有情节,我希望实现的箭头效果非常类似于截图中的那个。
我已经研究过plt.quiver()
,但只需要1分,所以我正在寻找一种有效的解决方法,在循环浏览CSV数据的同时将这些箭头添加到我的情节中。
我会感谢任何解决方案的想法。
答案 0 :(得分:0)
您可以使用' arrow'绘制箭头,就像这里:
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()
您必须使用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)