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

Plotly中用go.Box实现X轴标签与图例不同的方法

解决方案

修改要点

  • 给原始设备场强字段做标签映射,转换成需求里的X轴显示文本
  • 把图例统一改成指标名称,用分组功能让同指标的图联动,同时避免图例重复显示

修改后的完整代码

import plotly.graph_objects as go
from plotly.subplots import make_subplots

# 建立设备场强到X轴标签的映射,第三个字段名请根据实际数据调整
device_label_map = {
    'device_field_strength_1.5': 'device field strength 1.5',
    'device_field_strength_3': 'device field strength 3',
    'device_field_strength_changed': 'device model changed'
}

fig = make_subplots(rows=1, cols=2, subplot_titles=("4位专家", "F1得分最高的4种方法"))

device_field_strengths = device_field_strength_impact_df.device_field_strength.unique()

# 记录已添加图例的指标,避免重复显示
legend_added = set()

for group in ['experts', 'best_methods']:
    for metric in ['F1_score', 'Dice']:
        # 转换指标名称为图例显示文本
        legend_name = 'F1 score' if metric == 'F1_score' else 'Dice score'
        for device_field_strength in device_field_strengths:
            x_label = device_label_map[device_field_strength]
            # 仅该指标首次出现时显示图例
            show_legend = metric not in legend_added
            
            fig.add_trace(go.Box(
                y=device_field_strength_impact_df[(device_field_strength_impact_df.device_field_strength==device_field_strength) & 
                                                  (device_field_strength_impact_df.group==group) & 
                                                  (device_field_strength_impact_df.variable==metric)].value,
                x=[x_label],  # 设置X轴显示的标签
                name=legend_name,  # 图例显示指标名称
                text=group,
                legendgroup=metric,  # 同指标归为一组,点击图例可批量控制
                marker_color='darkblue' if metric == 'F1_score' else 'red',
                boxmean=True,
                showlegend=show_legend
            ), row=1, col=1 if group == 'experts' else 2)
        
        # 标记该指标已添加图例
        if metric not in legend_added:
            legend_added.add(metric)

# 可选:设置X轴标题
fig.update_layout(
    xaxis_title="设备参数",
    xaxis2_title="设备参数"
)

fig.show()

关键改动说明

  1. X轴标签自定义:

    • 用device_label_map字典把原始的设备场强字段名,转换成你需要的友好标签
    • 在go.Box中添加x=[x_label]参数,指定当前箱线图对应的X轴显示文本
  2. 图例优化:

    • 把name设置为"F1 score"或"Dice score",直接作为图例显示内容
    • 用legendgroup=metric把同一指标的所有箱线图归为一组,点击图例可以同时显示/隐藏该指标的所有数据
    • 通过legend_added集合控制showlegend参数,确保每个指标只在第一次出现时显示图例,避免重复条目

补充说明

之前以为Plotly Express无法显示均值,其实只需在px.box()后添加fig.update_traces(boxmean=True)就能实现,感谢r-beginners的提示!


内容的提问来源于stack exchange,提问作者arthur.sw

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:55:27