如何创建各分支独立缩放的KPI蜘蛛图(Power BI/Python实现)
实现独立分支缩放的KPI对比蜘蛛图方案
Power BI 实现路径
方法1:嵌入Python自定义雷达图
- 数据准备:确保数据集包含
KPI名称、当期绩效、目标值、往期绩效字段 - 在Power BI中添加Python视觉,导入库并运行以下代码,自动按每个KPI的目标值作为分支最大值实现独立缩放
import matplotlib.pyplot as plt import numpy as np import pandas as pd # 获取Power BI传入的数据 df = dataset # 提取KPI及对应数值 categories = df['KPI名称'].tolist() current = df['当期绩效'].tolist() target = df['目标值'].tolist() previous = df['往期绩效'].tolist() # 设置雷达图角度 N = len(categories) angles = [n / float(N) * 2 * np.pi for n in range(N)] angles += angles[:1] # 闭合数据 current += current[:1] target += target[:1] previous += previous[:1] # 创建画布 fig, ax = plt.subplots(figsize=(8, 8), subplot_kw={'projection': 'polar'}) # 绘制对比线条 ax.plot(angles, current, 'o-', linewidth=2, label='当期绩效') ax.plot(angles, target, 'o-', linewidth=2, label='目标值') ax.plot(angles, previous, 'o-', linewidth=2, label='往期绩效') # 关键:为每个分支设置独立刻度范围 for i in range(N): max_val = max(target[i], current[i], previous[i]) * 1.1 ax.set_ylim(i, 0, max_val) # 配置标签与图例 ax.set_xticks(angles[:-1]) ax.set_xticklabels(categories) ax.legend(loc='upper right', bbox_to_anchor=(0.1, 0.1)) plt.title('KPI绩效对比蜘蛛图', y=1.1) plt.show()
方法2:第三方自定义视觉
前往Power BI视觉市场搜索支持独立轴缩放的雷达图工具,导入后绑定对应字段,在格式面板中开启独立缩放配置即可。
Python 独立实现方案
Matplotlib 静态蜘蛛图
import matplotlib.pyplot as plt import numpy as np import pandas as pd # 模拟数据集 data = { 'KPI名称': ['销售额', '客户留存率', '转化率', '客单价'], '当期绩效': [85000, 78, 22, 120], '目标值': [100000, 85, 25, 150], '往期绩效': [75000, 72, 18, 105] } df = pd.DataFrame(data) categories = df['KPI名称'].tolist() current = df['当期绩效'].tolist() target = df['目标值'].tolist() previous = df['往期绩效'].tolist() N = len(categories) angles = np.linspace(0, 2*np.pi, N, endpoint=False) angles = np.concatenate((angles, [angles[0]])) # 闭合数据 current = np.concatenate((current, [current[0]])) target = np.concatenate((target, [target[0]])) previous = np.concatenate((previous, [previous[0]])) # 创建画布 fig = plt.figure(figsize=(8, 8)) ax = fig.add_subplot(111, polar=True) # 绘制对比线条 ax.plot(angles, current, 'b-', marker='o', label='当期绩效') ax.plot(angles, target, 'r-', marker='s', label='目标值') ax.plot(angles, previous, 'g-', marker='^', label='往期绩效') # 设置独立分支刻度范围 for i in range(N): max_val = max(target[i], current[i], previous[i]) * 1.1 ax.set_ylim(i, 0, max_val) # 配置标签与图例 ax.set_xticks(angles[:-1]) ax.set_xticklabels(categories) ax.legend(loc='upper right', bbox_to_anchor=(1.3, 1.0)) plt.title('KPI多维度绩效对比', pad=30) plt.show()
Plotly 交互式蜘蛛图
import plotly.graph_objects as go import pandas as pd # 模拟数据集 data = { 'KPI名称': ['销售额', '客户留存率', '转化率', '客单价'], '当期绩效': [85000, 78, 22, 120], '目标值': [100000, 85, 25, 150], '往期绩效': [75000, 72, 18, 105] } df = pd.DataFrame(data) categories = df['KPI名称'].tolist() fig = go.Figure() # 添加对比轨迹 fig.add_trace(go.Scatterpolar( r=df['当期绩效'].tolist() + [df['当期绩效'][0]], theta=categories + [categories[0]], name='当期绩效', line=dict(color='blue') )) fig.add_trace(go.Scatterpolar( r=df['目标值'].tolist() + [df['目标值'][0]], theta=categories + [categories[0]], name='目标值', line=dict(color='red') )) fig.add_trace(go.Scatterpolar( r=df['往期绩效'].tolist() + [df['往期绩效'][0]], theta=categories + [categories[0]], name='往期绩效', line=dict(color='green') )) # 配置交互式布局 fig.update_layout( polar=dict( radialaxis=dict( visible=True, range=[0, max(df['目标值'].tolist())*1.1] ) ), showlegend=True, title='交互式KPI绩效对比蜘蛛图' ) fig.show()
内容的提问来源于stack exchange,提问作者Dru
相关产品推荐
相关产品推荐

