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

如何设置Plotly px.sunburst最大值及叠加展示学生挑战完成情况

实现带未完成挑战灰色标记的Plotly旭日图

不用叠加两个旭日图,直接合并两个数据集后统一处理更高效,完全能满足你的需求——展示所有挑战的最大值、已完成项正常着色、未完成项设为灰色。

步骤1:数据预处理

首先需要把两个DataFrame合并,标记每个挑战是否被学生完成,同时确保Value列是数值类型(原数据是字符串,会影响绘图计算):

import pandas as pd
import plotly.express as px

# 原始数据
challenge_count_df = pd.DataFrame({'Challenge': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'],
                                  'Value' : ["5","5","10","15","5","10","5","10","15","10"],
                                  'Category' : ['linux','primer','windows','linux','linux','primer','windows','linux', 'linux', 'primer']})

student_df = pd.DataFrame({'Challenge': ['B', 'C', 'E', 'F', 'G', 'H', 'I'],
                                  'Value' : ["5","10","5","10","5","10","15"],
                                  'Category' : ['primer','windows','linux','primer','windows','linux', 'linux']})

# 转换Value为数值类型
challenge_count_df['Value'] = challenge_count_df['Value'].astype(int)
student_df['Value'] = student_df['Value'].astype(int)

# 合并数据集,标记是否完成
merged_df = challenge_count_df.merge(
    student_df[['Challenge']].assign(Completed=True),
    on='Challenge',
    how='left'
).fillna({'Completed': False})

步骤2:绘制旭日图

利用color参数区分已完成/未完成项,自定义颜色映射把未完成项设为灰色:

# 定义颜色映射:已完成用默认配色,未完成用灰色
color_map = {True: px.colors.qualitative.Plotly[0], False: '#cccccc'}

fig = px.sunburst(
    merged_df,
    path=['Category', 'Challenge'],
    values='Value',
    color='Completed',
    color_discrete_map=color_map,
    title='学生挑战完成情况旭日图'
)

# 隐藏图例(可选,因为灰色已经直观表示未完成)
fig.update_layout(showlegend=False)

fig.show()

效果说明

  • 所有挑战都会显示在旭日图中,每个Category的大小由该分类下所有挑战的最大值总和决定
  • 学生已完成的挑战会用默认彩色显示,未完成的(A、D、J)会显示为灰色
  • 鼠标悬停时可以查看每个挑战的具体数值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:15:42