使用pl.arrow()显示方向的线段

时间:2013-12-03 14:24:09

标签: matplotlib plot

我有一组细分线 AB 。点 A 位于[x0,y0] = [0.0]坐标中作为径向点。 B 是细分线[x1,y1]的结尾。我找到了一些答案here,我试图让它适应我的问题。

问题:如何绘制径向段,显示B是箭头的末尾。?因为,在我的代码中,箭头大小确实超过了绘图窗口。

任何帮助都将不胜感激。

import numpy as np
import pylab as pl

def arrow_segment(AB):

    for idx in range(0,len(AB)):
            plt.arrow(AB[idx,0],  #x1
                  AB[idx,1],  # y1
                  AB[idx,2]-AB[idx,0], # x2 - x1
                  AB[idx,3]-AB[idx,1], # y2 - y1
                  color='blue',head_width=0.05, head_length=0.1)
    plt.show()
AB = [[0, 0., 1., 10]]
arrow_segment(AB)

1 个答案:

答案 0 :(得分:1)

我的理解是,当箭头离开情节时,你正在询问该怎么做。有几个选择:

  1. 您可以将箭头绘制到边界并使用一种箭头指示它不是箭头的真正结尾,例如半箭头,"shape"="left"或打开与关闭,等
  2. 您可以沿箭头中途绘制箭头,就像流线一样。我在mpl中不知道这个命令,但是你可以用两个箭头轻松地做到这一点,或者只是绘制一条线和一个箭头,等等。
  3. 修改 为了完整起见,我将把我的看法加在#2上。这是我绘制线条,然后在线条上绘制箭头,箭头可以在线条的任何位置绘制,并由f控制(在0和1之间)。该示例显示为f绘制的几行,范围从0.1

    import numpy as np
    import pylab as plt
    
    def arrow_mh(v4, color, f=.5):
        x0, y0, x1, y1 = v4
        line = plt.plot([x0, x1], [y0, y1], color=color)
    
        f = max(f, .0001)
        dx = f*(x1-x0)
        dy = f*(y1-y0)
        a = plt.arrow(x0, y0, dx, dy,
              color=color,head_width=0.05, head_length=0.1)
    
    def arrow_segment(AB):
    
        for idx in range(0,len(AB)):
            arrow_mh(AB[idx], 'blue', .01*(9-idx))
        plt.xlim(0, 1)
        plt.ylim(0, 1)
        plt.show()
    AB = np.array([[.1*i, .1, .5, 4] for i in range(10)])
    arrow_segment(AB)
    

    enter image description here