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

2024-09-28 01:32:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

Custom arrow style for matplotlib, pyplot.annotate开始,索洛·卡斯特罗展示了一个漂亮的定制箭头(箭头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)

提前谢谢。在


Tags: 标记定义matplotlibstylea1绘制符号箭头
1条回答
网友
1楼 · 发布于 2024-09-28 01:32:50

所以我把多边形简化了一点,还发现旋转可以用mpl.transforms.Affine2D()。旋转角度():

    a2 = np.array([[newX,newY+2],[newX+1,newY-1],[newX,newY],[newX-1,newY-1],[newX,newY+2]], dtype=float)
    polB = patches.Polygon(a2, closed=True, facecolor='gold')
    t2 = mpl.transforms.Affine2D().rotate_deg_around(newX,newY,heading) + newax.transData
    polB.set_transform(t2)
    newax.add_patch(polB)

我首先试着用x,y坐标画出一条线来覆盖多边形。但是,x轴和y轴的比例不相等(我也不希望它们是相等的),因此多边形在旋转时看起来都扭曲和拉伸。我首先添加了一个新的轴,它具有相同的x/y缩放比例:

^{pr2}$

我至少可以旋转所有我想要的,而不是翘曲问题。但是我需要弄清楚如何基本上连接这两个轴,这样我就可以在新的轴上,在一个从原始轴引用的点上绘制多边形。我的方法是使用转换从原始轴上的数据坐标转换,将它们转换为显示坐标,然后将它们反转回数据坐标,但这次在新轴上的数据坐标除外:

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

这样做感觉有点像鲁比·戈德伯格的机器,但它做到了我想要的。在

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

相关问题 更多 >

    热门问题