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

如何在Plotly中创建双向旭日图,内外分展VOLUME与AGE?

基于VOLUME和AGE的旭日图实现(Python)

可以用Plotly轻松实现你要的旭日图,核心是构建层级化结构,让内层展示AGE、外层对应实体的VOLUME数值。以下是具体实现方案:

方案1:Plotly Express 快速实现

直接利用px.sunburst的path参数定义层级,内层为AGE,外层为每个ID,ID对应的大小由VOLUME决定:

import pandas as pd
import plotly.express as px

# 初始化你的DataFrame
data = {
    "ID": ["95001", "27024", "90404", "90483"],
    "VOLUME": [231, 352, 421, 213],
    "AGE": [15, 9, 11, 30]
}
df = pd.DataFrame(data)

# 绘制旭日图
fig = px.sunburst(
    df,
    path=["AGE", "ID"],  # 层级:内层AGE -> 外层ID
    values="VOLUME",     # 外层节点大小对应VOLUME
    title="AGE与VOLUME分布旭日图",
    color="AGE",         # 按AGE区分颜色
    color_continuous_scale=px.colors.sequential.Blues
)

# 调整图内边距
fig.update_layout(margin=dict(t=50, l=0, r=0, b=0))
fig.show()

这个方案生成的旭日图中:

  • 中心内层是各个AGE值
  • 外层是对应AGE下的实体ID,每个ID区块的大小直接反映VOLUME数值
  • 鼠标hover时还能查看具体的VOLUME和AGE数据

方案2:自定义层级(含总节点)

如果需要在最中心添加一个总数据节点,展示所有VOLUME的总和,可以手动构建层级数据:

import pandas as pd
import plotly.express as px

data = {
    "ID": ["95001", "27024", "90404", "90483"],
    "VOLUME": [231, 352, 421, 213],
    "AGE": [15, 9, 11, 30]
}
df = pd.DataFrame(data)

# 构建旭日图所需的层级数据集
# 1. 总节点(最中心)
root = pd.DataFrame({
    "name": ["总数据"],
    "parent": [""],
    "value": [df["VOLUME"].sum()]
})

# 2. AGE节点(内层)
age_nodes = df.groupby("AGE")["VOLUME"].sum().reset_index()
age_nodes = age_nodes.rename(columns={"AGE": "name", "VOLUME": "value"})
age_nodes["parent"] = "总数据"

# 3. ID节点(外层,对应VOLUME)
id_nodes = df.rename(columns={"ID": "name", "VOLUME": "value"})
id_nodes["parent"] = df["AGE"].astype(str)
# 可选:在ID标签中加入AGE信息
id_nodes["name"] = id_nodes["name"] + "(AGE:" + df["AGE"].astype(str) + ")"

# 合并所有节点
sunburst_data = pd.concat([root, age_nodes, id_nodes], ignore_index=True)

# 绘制旭日图
fig = px.sunburst(
    sunburst_data,
    names="name",
    parents="parent",
    values="value",
    title="带总节点的AGE-VOLUME旭日图",
    color="parent",
    color_discrete_sequence=px.colors.qualitative.Pastel
)

fig.update_layout(margin=dict(t=50, l=0, r=0, b=0))
fig.show()

其他工具选项

如果不想用Plotly,也可以用matplotlib配合squarify库绘制类似的树状旭日图,但交互性会弱一些。不过Plotly的交互能力更适合查看具体数据细节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:45:34