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
相关产品推荐
相关产品推荐

