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

mplsoccer场地替换plt.plot为plt.arrow后箭头不显示的解决求助

解决plt.arrow替换plt.plot后箭头不显示的问题

我之前跟着McKay Johns的教程改传球可视化代码时也碰到过这个坑,plt.arrow和plt.plot的参数逻辑完全不一样,给你几个必查的点:

  • 别搞混参数逻辑
    plt.plot是直接传起点+终点坐标,而plt.arrow的前两个参数是起点(x,y),第三、四个参数是偏移量dx、dy(也就是终点减起点的值)。很多人直接把plot的终点坐标当dx/dy传,结果箭头要么缩成一个点,要么飞到画布外面。
    错误写法:

    plt.arrow(start_x, start_y, end_x, end_y)  # 直接传终点,错!
    

    正确写法:

    dx = end_x - start_x
    dy = end_y - start_y
    plt.arrow(start_x, start_y, dx, dy)
    
  • 调大箭头尺寸
    默认的width和head_width在足球场地的坐标系下太小,肉眼根本看不见。直接加参数调大:

    plt.arrow(x1, y1, dx, dy, width=0.25, head_width=1.2, head_length=1.5)
    

    width是箭身粗细,head_width/head_length是箭头大小,根据你的画布尺寸微调。

  • 锁定坐标轴范围
    如果传球坐标超出了当前plt的默认坐标轴范围,箭头会被直接裁掉。绘图后加上场地对应的坐标范围:

    plt.xlim(0, 120)  # 足球场地宽度,按需调整
    plt.ylim(0, 80)   # 足球场地长度,按需调整
    
  • 检查绘图顺序
    如果先画箭头再画场地背景或球员标记,箭头会被盖住。把箭头的绘制代码放在所有图层的最后。

给你个可直接参考的代码片段:

import matplotlib.pyplot as plt

# 假设你的成功传球数据是这些列表
start_x = [10, 20, 30]
start_y = [40, 50, 35]
end_x = [30, 45, 55]
end_y = [45, 55, 40]

plt.figure(figsize=(12, 8))
# 先画场地背景(如果有)
# plt.imshow(...)

# 遍历绘制每个传球箭头
for x1, y1, x2, y2 in zip(start_x, start_y, end_x, end_y):
    dx = x2 - x1
    dy = y2 - y1
    plt.arrow(
        x1, y1, dx, dy,
        width=0.25, head_width=1.2, head_length=1.5,
        color='green', alpha=0.7
    )

plt.xlim(0, 120)
plt.ylim(0, 80)
plt.axis('off')
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:51:19