使用mplsoccer绘制足球传球图时遇ValueError错误求助
解决mplsoccer绘制传球图的ValueError问题
错误原因分析
报错核心是**np.int()被错误地用于包裹ax.set_title()的调用**,而ax.set_title()返回的是Matplotlib的Text对象,并非可转换为整数的标量值。另外还需确保球队名字段的唯一值确实只有一个,否则.item()也会引发问题。
修复步骤
移除多余的
np.int()包裹
你的代码中ax.set_title()不需要用np.int()转换,直接保留原调用即可。修正后的代码行:ax.set_title(pass_map_df_team1["possession_team.name"].unique().item(), fontsize=30)验证球队名唯一值的数量
如果pass_map_df_team1["possession_team.name"].unique()返回的数组长度大于1,.item()会报错。可以先打印验证:print(pass_map_df_team1["possession_team.name"].unique())- 如果确实有多个球队名,需要先过滤数据,确保
pass_map_df_team1只包含单一球队的传球数据; - 若要强制取第一个球队名,可将
.item()替换为[0]:ax.set_title(pass_map_df_team1["possession_team.name"].unique()[0], fontsize=30)
- 如果确实有多个球队名,需要先过滤数据,确保
完整修正后的代码示例
import mplsoccer import pandas as pd # 假设pass_map_df_team1是已加载的DataFrame pitch = mplsoccer.Pitch(pitch_color='#101010', line_color='white') fig, ax = pitch.draw(figsize=(16, 8)) arrows = pitch.arrows(pass_map_df_team1["startX"], pass_map_df_team1["startY"], pass_map_df_team1["endX"], pass_map_df_team1["endY"], ax=ax, width=1, color="green") # 验证球队名唯一值 team_names = pass_map_df_team1["possession_team.name"].unique() if len(team_names) == 1: ax.set_title(team_names.item(), fontsize=30) else: # 可根据需求处理,这里取第一个球队名 ax.set_title(team_names[0], fontsize=30)
内容的提问来源于stack exchange,提问作者Boni
相关产品推荐
相关产品推荐

