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列提取,确保披萨图的标题/标签正确显示
三、完整联动实现注意事项
Power BI数据准备:
- 原始数据需为每行一个球员,包含球员姓名列和12个统计指标列(共13列)
- 复制球员姓名列,命名为
Player 1和Player 2,得到14列的数据集 - 分别基于
Player 1和Player 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()
- Power BI中设置:
- 在Power BI的Python可视化编辑器中粘贴上述完整代码
- 确保数据集包含
Player 1、Player 2和所有指标列 - 调整切片器为单选模式,选择不同球员即可实时联动披萨图
内容的提问来源于stack exchange,提问作者nokvk
相关产品推荐
相关产品推荐

