You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib绘制单侧定向2D箭头的问题求助

解决Matplotlib贝塞尔控制线段箭头问题

针对你遇到的三个问题,直接用Line2D加marker的方式无法满足需求,推荐使用matplotlib.patches.FancyArrowPatch来绘制带箭头的控制线段,它能精准控制箭头的位置、方向和样式。

修正后的代码示例:

from matplotlib.patches import FancyArrowPatch

# 绘制第一条控制线段(箭头指向p1,仅在末端显示)
arrow1 = FancyArrowPatch(
    (p0[0], p0[1]), (p1[0], p1[1]),
    arrowstyle='->',
    linewidth=0.2,
    mutation_scale=8,
    color='black'
)
ax.add_patch(arrow1)

# 绘制第二条控制线段(箭头指向p3,方向向下,仅在末端显示)
arrow2 = FancyArrowPatch(
    (p2[0], p2[1]), (p3[0], p3[1]),
    arrowstyle='->',
    linewidth=0.2,
    mutation_scale=8,
    color='black'
)
ax.add_patch(arrow2)

问题解决说明:

  • 箭头仅在前端显示:FancyArrowPatch默认只在线段的终点(第二个坐标参数)绘制箭头,自然解决两端都有标记的问题。
  • 箭头方向错误:箭头方向由起点到终点的坐标顺序决定,确保(p2, p3)的坐标顺序正确,箭头就会指向预期方向;若需反向箭头,交换起点和终点坐标即可。
  • 箭头与线段不垂直且未居中:arrowstyle='->'是内置标准箭头样式,会自动与线段垂直并居中对齐;通过mutation_scale可调整箭头大小,匹配线段粗细。

如果需要更精细的箭头样式控制,可修改arrowstyle参数,例如arrowstyle='-|>,head_width=0.3,head_length=0.5'来调整箭头的角度、长度等细节。

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 19:16:03