Python 是否可以使用自定义箭头或多边形作为标记在matplotlib中打印位置和标题?

Python 是否可以使用自定义箭头或多边形作为标记在matplotlib中打印位置和标题?,python,matplotlib,marker,angle,Python,Matplotlib,Marker,Angle,我有一系列的x,y坐标和多架飞机的相关航向角。我可以画出飞行的路径,我想用一个特殊的标记来标记路径上的一个特定位置,同时也显示飞机在该位置时的航向 使用matplotlib.pyplot,我使用了一个没有底部的箭头来执行此操作,但在绘制多架飞机时,必须定义头部和尾部位置,最终导致箭头长度不一致。我还使用了一个自定义的三面符号和元组(numsides、style、angle)以及楔形符号和bigvee符号,但它们看起来从来都不是很好 Saullo Castro展示了一个很好的自定义箭头(箭头1),

我有一系列的x,y坐标和多架飞机的相关航向角。我可以画出飞行的路径,我想用一个特殊的标记来标记路径上的一个特定位置,同时也显示飞机在该位置时的航向

使用matplotlib.pyplot,我使用了一个没有底部的箭头来执行此操作,但在绘制多架飞机时,必须定义头部和尾部位置,最终导致箭头长度不一致。我还使用了一个自定义的三面符号和元组(numsides、style、angle)以及楔形符号和bigvee符号,但它们看起来从来都不是很好

Saullo Castro展示了一个很好的自定义箭头(箭头1),我想知道它是否可以被使用或转换成这样一种方式,只需在给定的x,y处绘制它,并通过航向角定义它的方向

我可以用以下内容绘制自定义箭头。有没有关于如何旋转它以反映标题的想法

a1 = np.array([[0,0],[0,1],[-1,2],[3,0],[-1,-2],[0,-1],[0,0]], dtype=float)
polB = patches.Polygon(a1, closed=True, facecolor='grey')
ax.add_patch(polB)

提前感谢。

因此我将多边形简化了一点,并发现旋转可以通过使用mpl.transforms.Affine2D()完成。rotate_deg_around():

我首先尝试将多边形覆盖在从x,y坐标绘制的线上。但是,x轴和y轴的比例不相等(我也不希望它们相等),因此多边形在旋转时看起来完全扭曲和拉伸。我首先添加了一个具有相等x/y比例的新轴来解决这个问题:

    newax = fig.add_axes(ax.get_position(), frameon=False)
    newax.set_xlim(-20,20)
    newax.set_ylim(-20,20) 
我至少可以旋转所有我想要的,而不会有扭曲的问题。但是接下来我需要弄清楚如何基本上连接两个轴,这样我就可以在从原始轴引用的点上绘制新轴上的多边形。我想这样做的方法是使用转换从原始轴上的数据坐标开始,将它们转换为显示坐标,然后将它们反转回数据坐标,但这次在新轴上的数据坐标除外:

    inTrans = ax.transData.transform((x, y))
    inv = newax.transData.inverted()
    newTrans = inv.transform((inTrans[0], inTrans[1]))
    newX = newTrans[0]
    newY = newTrans[1]
这样做感觉有点像鲁布·戈德伯格的机器,但它做到了我想要的

最后,我决定我不喜欢这种方法,并继续保持它的简单性,使用一个奇特的箭头而不是多边形。这就是生活

    inTrans = ax.transData.transform((x, y))
    inv = newax.transData.inverted()
    newTrans = inv.transform((inTrans[0], inTrans[1]))
    newX = newTrans[0]
    newY = newTrans[1]