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

Power BI中Python可视化(mplsoccer披萨图)切片器报错解决

解决Power BI中mplsoccer披萨图联动切片器的问题

一、是否需要重复设置球员列?

需要。为了实现两个独立的球员选择切片器,必须将原始的球员名列复制一份,分别命名为Player 1和Player 2。这样两个切片器可以独立选择不同球员,不会互相干扰。

二、修复代码报错并实现数据提取

原代码的错误在于对数据结构的处理逻辑混乱,以下是修正后的代码片段:

# 提取选中的两名球员的指标数据
# 行0是Player1切片器选中的球员数据,从第3列(索引2)开始为指标值
jugador1 = df.iloc[0, 2:].tolist()
# 行1是Player2切片器选中的球员数据,从第3列(索引2)开始为指标值
jugador2 = df.iloc[1, 2:].tolist()

# 提取两名球员的姓名
player1_name = df.iloc[0, 0]
player2_name = df.iloc[1, 1]

代码说明:

  • df.iloc[0, 2:]:直接定位到筛选后df的第一行(Player1选中的球员),提取从第3列开始的所有指标数据并转成列表
  • df.iloc[1, 2:]:同理,提取第二行(Player2选中的球员)的指标数据
  • 球员姓名从对应行的第1、2列提取,确保披萨图的标题/标签正确显示

三、完整联动实现注意事项

  1. Power BI数据准备:

    • 原始数据需为每行一个球员,包含球员姓名列和12个统计指标列(共13列)
    • 复制球员姓名列,命名为Player 1和Player 2,得到14列的数据集
    • 分别基于Player 1和Player 2创建两个切片器,设置为“单选”模式
  2. mplsoccer披萨图代码整合:
    将上述数据提取代码替换原有的错误片段,结合mplsoccer的披萨图逻辑,完整代码示例如下(需根据你的实际指标名称调整):

import matplotlib.pyplot as plt
from mplsoccer import PyPizza

# 修正后的数据提取部分
jugador1 = df.iloc[0, 2:].tolist()
jugador2 = df.iloc[1, 2:].tolist()
player1_name = df.iloc[0, 0]
player2_name = df.iloc[1, 1]

# 定义指标名称(需和你的数据列名对应,共12个)
params = [
    '指标1', '指标2', '指标3', '指标4', '指标5', '指标6',
    '指标7', '指标8', '指标9', '指标10', '指标11', '指标12'
]

# 创建披萨图实例
baker = PyPizza(
    params=params,                  # 参数列表
    background_color="#222222",     # 背景色
    straight_line_color="#000000",  # 直线颜色
    straight_line_lw=1,             # 直线宽度
    last_circle_color="#000000",    # 最外层圆颜色
    last_circle_lw=1,               # 最外层圆宽度
    other_circle_lw=0,              # 其他圆宽度
    inner_circle_size=20            # 内层圆大小
)

# 绘制对比披萨图
fig, ax = baker.make_pizza(
    jugador1,                      # 球员1的数据
    compare_values=jugador2,       # 球员2的数据
    figsize=(8, 8),                # 图大小
    color_blank_space="same",      # 空白区域颜色设置
    blank_alpha=0.4,               # 空白区域透明度
    param_location=110,            # 参数标签位置
    kwargs_slices=dict(
        facecolor="#1A78CF", edgecolor="#000000",
        zorder=2, linewidth=1
    ),
    kwargs_compare=dict(
        facecolor="#ff9300", edgecolor="#000000",
        zorder=2, linewidth=1
    ),
    kwargs_params=dict(
        color="#F2F2F2", fontsize=12,
        va="center", ha="center"
    ),
    kwargs_values=dict(
        color="#000000", fontsize=12,
        zorder=3, va="center", ha="center"
    ),
    kwargs_compare_values=dict(
        color="#000000", fontsize=12,
        zorder=3, va="center", ha="center"
    )
)

# 添加标题
fig.text(
    0.5, 0.97, f"{player1_name} vs {player2_name}",
    ha="center", fontsize=16, color="#F2F2F2"
)

# 显示图形
plt.show()
  1. Power BI中设置:
    • 在Power BI的Python可视化编辑器中粘贴上述完整代码
    • 确保数据集包含Player 1、Player 2和所有指标列
    • 调整切片器为单选模式,选择不同球员即可实时联动披萨图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:52:47