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

Matplotlib自定义箭头:如何设置三角形箭头而非斜角样式

解决Matplotlib箭头尖端斜角问题,实现三角形箭头

Matplotlib预设的<|-|>箭头样式默认是梯形(斜角)尖端,要实现三角形尖端,可通过两种方式调整:

方式1:修改annotate的箭头参数

直接调整arrowprops中的尺寸参数,让箭头尖端从梯形变为三角形:

import matplotlib.pyplot as plt

plt.annotate('',
             xy=(0.5, 0.9),  # 箭头终点
             xytext=(0.5, 0.55),  # 箭头起点
             arrowprops={
                 'arrowstyle': '<|-|>',
                 'color': 'darkgoldenrod',
                 'width': 2,          # 箭身宽度
                 'headwidth': 6,      # 箭头基部宽度(设为箭身的3倍)
                 'headlength': 8,     # 箭头长度
                 'shrinkA': 0,        # 起点无缩进
                 'shrinkB': 0         # 终点无缩进
             },
             xycoords='axes fraction',
             textcoords='axes fraction')
plt.text(0.55, 0.725, r"$\times$20", color='darkgoldenrod', fontsize=7, ha='left', va='center', transform=plt.gca().transAxes)

plt.show()

方式2:用FancyArrowPatch自定义箭头

如果需要更精准的控制,直接使用FancyArrowPatch绘制,可完全自定义箭头尖端形状:

import matplotlib.pyplot as plt
from matplotlib.patches import FancyArrowPatch

fig, ax = plt.subplots()

# 创建双向三角形箭头
arrow = FancyArrowPatch(
    (0.5, 0.55), (0.5, 0.9),
    arrowstyle='<|-|>',
    color='darkgoldenrod',
    linewidth=2,
    head_width=0.03,   # 箭头基部宽度(轴坐标下的数值)
    head_length=0.04,  # 箭头长度
    mutation_scale=15  # 整体缩放比例
)
ax.add_patch(arrow)

plt.text(0.55, 0.725, r"$\times$20", color='darkgoldenrod', fontsize=7, ha='left', va='center', transform=ax.transAxes)

plt.show()

原理说明

预设箭头的斜角来自梯形尖端,当箭头基部宽度(headwidth/head_width)与箭身宽度、箭头长度的比例合适时,两侧斜边会交汇成一点,形成标准三角形。调整参数时可根据绘图尺寸微调数值,直到得到满意的三角形效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:25:26