如何用Matplotlib绘制LoL战队胜率柱状图?解决TypeError报错
问题原因与修复方案
错误根源
- 胜率数组维度错误:你把每个胜率定义成了单元素列表(比如
GenG_WR = [0.70]),转成numpy数组后变成了二维数组(形状为(12, 1)),而plt.bar要求传入一维的数值序列,这直接触发了TypeError。 - xticks用法错误:
plt.xticks(len(teams), teams)的写法不符合API要求,第一个参数应该是刻度的位置数组,而非队伍数量。
修复步骤
- 将每个胜率的单元素列表改为单个数值(去掉方括号),或在生成numpy数组时做扁平化处理
- 修正
plt.xticks的调用方式,确保刻度位置与队伍名称正确对应 - 可选:添加x轴标签旋转,避免长名称重叠
修正后的完整代码
import matplotlib.pyplot as plt import numpy as np %matplotlib inline plt.rcParams['figure.figsize'] = 10,4 # 战队列表 teams = ['GenG', 'T1', 'JD Gaming', 'Cloud9', 'Bilibili Gaming', 'G2 Esports', 'Golden Guardians', 'PSG Talon', 'GAM Esports', 'Detonation FocusMe', 'LOUD', 'Movistar R7'] # 胜率改为单个数值(而非单元素列表) Winrates = np.array([0.70, 0.75, 0.77, 0.80, 0.59, 0.67, 0.54, 0.77, 0.76, 0.82, 0.72, 0.58]) # 绘制柱状图 plt.bar(teams, Winrates) # 修正xticks:用range(len(teams))指定位置,添加旋转避免标签重叠 plt.xticks(range(len(teams)), teams, rotation=45, ha='right') plt.ylabel('胜率(%)') plt.title('各战队赛段胜率') # 可选:在柱子上方显示具体胜率数值 for i, v in enumerate(Winrates): plt.text(i, v + 0.01, f'{v*100:.1f}%', ha='center') plt.tight_layout() # 自动调整布局,防止标签被截断 plt.show()
额外说明
- 如果后续要加入EU(TBD)战队,只需在
teams列表中插入对应位置,同时在Winrates数组中添加其胜率即可 - 若坚持保留原始的单元素列表定义,可用
Winrates = np.array([GenG_WR, T1_WR, ...]).flatten()扁平化数组,同样能解决维度问题
内容的提问来源于stack exchange,提问作者Murillo Euflausino
相关产品推荐
相关产品推荐

