【数据可视化-93】使用 Pyecharts 绘制旭日图:步骤与数据组织形式

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通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"}参数即可。