🧑 博主简介:曾任某智慧城市类企业
算法总监
,目前在美国市场的物流公司从事高级算法工程师
一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907
)
💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

【数据可视化-93】使用 Pyecharts 绘制旭日图:步骤与数据组织形式
一、引言
在数据可视化中,旭日图(Sunburst Chart)是一种非常直观且美观的图表,用于展示层次化的数据结构。它类似于饼图,但可以展示更多的层级关系。本文将详细介绍如何使用 Pyecharts 绘制旭日图,并重点介绍旭日图的数据组织形式。
二、旭日图的特点
旭日图是一种层次化的饼图,主要用于展示多层级的数据结构。它的每一层代表一个层级,每个扇区的大小表示该层级的占比。旭日图特别适合展示复杂的层级关系,如组织结构、文件系统、产品分类等。
三、数据组织形式
旭日图的数据组织形式通常是一个嵌套的列表结构,每个元素代表一个层级,每个层级又包含多个子元素。每个子元素是一个包含以下字段的字典:
name
:扇区的名称。value
:扇区的值,表示该扇区的大小。children
:子层级的列表,如果该扇区没有子层级,则可以省略。
以下是一个简单的例子:
python
data = [
{
"name": "一级分类",
"value": 10,
"children": [
{"name": "二级分类1", "value": 4},
{"name": "二级分类2", "value": 6},
],
}
]
2.1 多层级数据组织
旭日图支持多层级的数据结构,每个层级可以包含多个子层级。以下是一个包含三级分类的数据结构:
python
data = [
{
"name": "一级分类",
"value": 10,
"children": [
{"name": "二级分类1", "value": 4},
{
"name": "二级分类2",
"value": 6,
"children": [
{"name": "三级分类1", "value": 3},
{"name": "三级分类2", "value": 3},
],
},
],
}
]
四、绘制旭日图的步骤
4.1 安装 Pyecharts
在开始之前,确保已经安装了 Pyecharts。可以通过以下命令安装:
bash
pip install pyecharts
4.2 准备数据
根据旭日图的数据组织形式,准备你的数据。以下是一个完整的例子:
python
data = [
{
"name": "一级分类",
"value": 10,
"children": [
{"name": "二级分类1", "value": 4},
{
"name": "二级分类2",
"value": 6,
"children": [
{"name": "三级分类1", "value": 3},
{"name": "三级分类2", "value": 3},
],
},
],
},
]
4.3 初始化旭日图
使用 Pyecharts 的 Sunburst
组件来绘制旭日图。
python
from pyecharts.charts import Sunburst
from pyecharts import options as opts
# 初始化旭日图
sunburst = Sunburst(init_opts=opts.InitOpts(width="800px", height="800px"))
4.4 添加数据
将准备好的数据添加到旭日图中。
python
sunburst.add(
series_name="",
data_pair=data,
radius=[0, "90%"],
label_opts=opts.LabelOpts(is_show=True, position="inside"),
itemstyle_opts=opts.ItemStyleOpts(border_color="#fff"),
)
4.5 设置全局选项
设置旭日图的全局选项,如标题、视觉映射等。
python
sunburst.set_global_opts(
title_opts=opts.TitleOpts(title="旭日图示例", subtitle="数据来源:自定义"),
visualmap_opts=opts.VisualMapOpts(
pos_left="left",
pos_top="top",
min_=0,
max_=20,
orient="horizontal",
is_piecewise=True,
pieces=[
{"min": 15, "max": 20, "label": "15-20", "color": "#f44336"},
{"min": 10, "max": 14, "label": "10-14", "color": "#ff9800"},
{"min": 5, "max": 9, "label": "5-9", "color": "#ffeb3b"},
{"min": 0, "max": 4, "label": "0-4", "color": "#4caf50"},
],
),
)
4.6 渲染图表
将旭日图渲染为 HTML 文件,以便查看效果。
python
sunburst.render("旭日图示例.html")
五、运行结果
运行上述代码后,会生成一个名为 旭日图示例.html
的文件。打开该文件,可以看到如下效果:

六、高级旭日图示例
以下是一个更高级的旭日图示例,展示了如何使用更多的配置选项来增强图表的视觉效果。
python
from pyecharts.charts import Sunburst
from pyecharts import options as opts
# 准备数据
data = [
{
"name": "一级分类",
"value": 10,
"children": [
{"name": "二级分类1", "value": 4},
{
"name": "二级分类2",
"value": 6,
"children": [
{"name": "三级分类1", "value": 3},
{"name": "三级分类2", "value": 3},
],
},
],
},
{
"name": "一级分类2",
"value": 20,
"children": [
{"name": "二级分类3", "value": 10},
{"name": "二级分类4", "value": 10},
],
},
]
# 初始化旭日图
sunburst = Sunburst(init_opts=opts.InitOpts(width="1000px", height="600px"))
# 添加数据
sunburst.add(
"",
data_pair=data,
highlight_policy="ancestor",
radius=[0, "95%"],
sort_="null",
levels=[
{},
{
"r0": "15%",
"r": "35%",
"itemStyle": {"borderWidth": 2},
"label": {"rotate": "tangential"},
},
{"r0": "35%", "r": "70%", "label": {"align": "right"}},
{
"r0": "70%",
"r": "72%",
"label": {"position": "outside", "padding": 3, "silent": False},
"itemStyle": {"borderWidth": 3},
},
],
)
# 设置全局选项
sunburst.set_global_opts(
title_opts=opts.TitleOpts(title="Sunburst-官方示例"),
visualmap_opts=opts.VisualMapOpts(
pos_left="left",
pos_top="top",
min_=0,
max_=20,
orient="horizontal",
is_piecewise=True,
pieces=[
{"min": 15, "max": 20, "label": "15-20", "color": "#f44336"},
{"min": 10, "max": 14, "label": "10-14", "color": "#ff9800"},
{"min": 5, "max": 9, "label": "5-9", "color": "#ffeb3b"},
{"min": 0, "max": 4, "label": "0-4", "color": "#4caf50"},
],
),
)
# 设置系列选项
sunburst.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}"))
# 渲染图表
sunburst.render("旭日图示例1.html")

七、总结
本文详细介绍了如何使用 Pyecharts 绘制旭日图,并重点介绍了旭日图的数据组织形式。通过嵌套的列表结构,我们可以轻松地组织和展示多层级的数据。旭日图不仅美观,而且非常直观,特别适合展示复杂的层级关系,我们还可以使用在数据中的颜色设置来规定绘制图形的颜色,设置"itemStyle": {"color": "#e65832"}参数即可。