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

如何用Plotly将多变量SHAP值蜂群图合并为单张综合图?

问题:用Plotly复现SHAP汇总蜂群图(多变量合并展示)

我正在尝试用Plotly复现SHAP库的汇总图,手头有两个数据集:

  • 包含各数据点SHAP值的数据集
  • 包含特征独热编码(值为0或1)的原始数据集

目标是生成SHAP值的蜂群图,并根据对应独热编码变量的0/1值给每个点上色。目前的代码只能生成单变量的图表,想把所有变量的图表合并成一张综合图。

现有单变量绘图代码:

figures = []

for column in shap_values.columns:
    fig = px.strip(merged_df, x=merged_df[column+'_shap'], color=merged_df[column+'_train'], orientation='h', stripmode='overlay')

    fig.update_layout(
        title=f'Bee swarm plot de la valeur de Shapley pour {column}',
        xaxis_title='Valeur de Shapley (impact sur la sortie du modèle)',
        yaxis_title='Caractéristique'
    )
    
    figures.append(fig)

示例数据:

shap_values = pd.DataFrame(
    {"A" : [-0.065704,-0.096510,0.062368,0.062368,0.063093], 
     'B' : [-0.168249,-0.173284,-0.168756,-0.168756,-0.169378]})

train  = pd.DataFrame(
    {"A" : [0,1,1,0,0], 
     'B' : [1,1,0,0,1]})

merged_df = shap_values.join(train, lsuffix='_shap', rsuffix='_train')

解决方案

要实现多变量合并的蜂群图,核心是把宽格式数据转换为长格式,让Plotly能在同一个y轴上展示所有特征。

步骤1:重塑数据结构

将每个特征的SHAP值、对应编码值统一整理到三列中:特征名、SHAP值、特征编码值。

步骤2:绘制综合蜂群图

用px.strip()基于长格式数据绘图,将y轴设为特征名,x轴为SHAP值,颜色用编码值区分。

完整代码:

import pandas as pd
import plotly.express as px

# 1. 处理示例数据(实际使用时替换为你的数据集)
shap_values = pd.DataFrame(
    {"A" : [-0.065704,-0.096510,0.062368,0.062368,0.063093], 
     'B' : [-0.168249,-0.173284,-0.168756,-0.168756,-0.169378]})

train = pd.DataFrame(
    {"A" : [0,1,1,0,0], 
     'B' : [1,1,0,0,1]})

# 转换为长格式
merged_long = pd.DataFrame()
for col in shap_values.columns:
    temp_df = pd.DataFrame({
        '特征': col,
        'SHAP值': shap_values[col],
        '特征编码': train[col]
    })
    merged_long = pd.concat([merged_long, temp_df], ignore_index=True)

# 2. 绘制综合蜂群图
fig = px.strip(merged_long,
               x='SHAP值',
               y='特征',
               color='特征编码',
               orientation='h',
               stripmode='overlay',
               color_discrete_map={0: '#1f77b4', 1: '#ff7f0e'})  # 可自定义0/1对应的颜色

# 调整图表布局
fig.update_layout(
    title='SHAP值汇总蜂群图',
    xaxis_title='SHAP值(对模型输出的影响)',
    yaxis_title='特征',
    legend_title='特征编码值'
)

fig.show()

说明

  • 长格式数据让所有特征的SHAP值都能在同一个图表中展示,y轴自动按特征名分类
  • stripmode='overlay'保持点的重叠效果,更贴近SHAP原生汇总图的样式
  • 通过color_discrete_map可以自定义0和1对应的颜色,匹配你的可视化需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 02:52:13