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

如何用Matplotlib绘制LoL战队胜率柱状图?解决TypeError报错

问题原因与修复方案

错误根源

  1. 胜率数组维度错误:你把每个胜率定义成了单元素列表(比如GenG_WR = [0.70]),转成numpy数组后变成了二维数组(形状为(12, 1)),而plt.bar要求传入一维的数值序列,这直接触发了TypeError。
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:00:25