深入Pyecharts:桑基图绘制与炫酷效果实战【第38篇—python:桑基图】

文章目录

  • 深入Pyecharts:桑基图绘制与炫酷效果实战
    • 桑基图简介
    • 安装 Pyecharts
    • 简单桑基图的绘制
    • 自定义桑基图的炫酷效果
      • 高级样式定制
    • 多组数据桑基图的展示
    • 动态桑基图的绘制
    • 结合真实数据的桑基图案例
    • 导出和分享
    • 进阶应用:桑基图与其他图表的组合
    • 总结

深入Pyecharts:桑基图绘制与炫酷效果实战

桑基图简介

桑基图(Sankey Diagram)是一种流程图,用于显示一组元素之间的关系和流动。它主要用于展示资源、能量、信息等在各个环节之间的流向,以及流向的数量关系。在数据可视化领域,桑基图常常被用来展示复杂系统中各个组成部分之间的相互影响和交互。

Pyecharts 是一个基于 Echarts 的 Python 数据可视化库,提供了丰富的图表类型,包括了桑基图。在本篇技术博客中,我们将深入介绍 Pyecharts 中绘制桑基图的多种炫酷效果,并提供相应的代码实例。
在这里插入图片描述

安装 Pyecharts

首先,确保你已经安装了 Pyecharts。可以通过以下命令进行安装:

pip install pyecharts

简单桑基图的绘制

在 Pyecharts 中,绘制简单的桑基图非常容易。以下是一个基本的桑基图绘制代码示例:

from pyecharts.charts import Sankey
from pyecharts import options as opts

nodes = [
    {"name": "A"},
    {"name": "B"},
    {"name": "C"},
]

links = [
    {"source": "A", "target": "B", "value": 10},
    {"source": "B", "target": "C", "value": 15},
]

sankey = (
    Sankey()
    .add(
        "Sankey",
        nodes,
        links,
        linestyle_opt=opts.LineStyleOpts(opacity=0.2, curve=0.5, color="source"),
        label_opts=opts.LabelOpts(position="right"),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="Basic Sankey"))
)

sankey.render("basic_sankey.html")

在这个例子中,我们定义了三个节点(A、B、C)和两个链接(A到B,B到C),每个链接都有一个数值表示流向的强度。通过调整 linestyle_optlabel_opts 的参数,你可以改变桑基图的线条样式和标签显示位置。

自定义桑基图的炫酷效果

高级样式定制

Pyecharts 提供了许多参数,可以用于定制桑基图的外观。以下是一些常用的高级样式定制参数:

  • linestyle_opt:线条样式的配置,包括透明度、曲率、颜色等。
  • label_opts:标签样式的配置,包括位置、颜色、字体大小等。
  • tooltip_opts:鼠标悬停提示框的配置,可以显示额外的信息。

下面是一个高级样式定制的示例代码:

from pyecharts.charts import Sankey
from pyecharts import options as opts

nodes = [
    {"name": "Source"},
    {"name": "Step1"},
    {"name": "Step2"},
    {"name": "Step3"},
    {"name": "Target"},
]

links = [
    {"source": "Source", "target": "Step1", "value": 100},
    {"source": "Step1", "target": "Step2", "value": 60},
    {"source": "Step2", "target": "Step3", "value": 30},
    {"source": "Step3", "target": "Target", "value": 15},
]

sankey = (
    Sankey()
    .add(
        "Sankey",
        nodes,
        links,
        linestyle_opt=opts.LineStyleOpts(
            opacity=0.5, curve=0.5, color="target", type_="dashed"
        ),
        label_opts=opts.LabelOpts(position="top", font_size=12),
        tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{b}: {c}"),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="Customized Sankey"))
)

sankey.render("custom_sankey.html")

在这个例子中,我们通过设置不同的样式参数,使得桑基图线条具有透明度、曲线、虚线等效果,同时调整标签的位置和字体大小,以及鼠标悬停提示框的格式。

多组数据桑基图的展示

在实际应用中,可能需要同时展示多组数据的桑基图,以比较它们之间的差异或趋势。Pyecharts 提供了支持多系列的桑基图,以下是一个示例代码:

from pyecharts.charts import Sankey
from pyecharts import options as opts

nodes = [
    {"name": "A"},
    {"name": "B"},
    {"name": "C"},
    {"name": "D"},
]

links_series = [
    {"source": "A", "target": "B", "value": 10},
    {"source": "B", "target": "C", "value": 15},
    {"source": "C", "target": "D", "value": 20},
]

sankey = (
    Sankey()
    .add("Series 1", nodes, links_series, is_selected=True)
    .add("Series 2", nodes, links_series, is_selected=False)
    .set_global_opts(title_opts=opts.TitleOpts(title="Multiple Series Sankey"))
)

sankey.render("multiple_series_sankey.html")

在这个例子中,我们使用了 add 方法来添加多个系列,每个系列可以有不同的数据,通过 is_selected 参数来设置默认选中的系列。这样,我们可以在同一图表中展示多组数据的桑基图,方便对比分析。

在这里插入图片描述

动态桑基图的绘制

除了静态的桑基图,Pyecharts 还支持绘制动态桑基图,通过时间轴展示数据变化的过程。以下是一个动态桑基图的示例代码:

from pyecharts.charts import Sankey, Timeline
from pyecharts import options as opts

nodes = [
    {"name": "A"},
    {"name": "B"},
    {"name": "C"},
]

links_timeline = {
    "time_points": ["2022-01-01", "2022-02-01", "2022-03-01"],
    "data": [
        [{"source": "A", "target": "B", "value": 10}],
        [{"source": "B", "target": "C", "value": 15}],
        [{"source": "A", "target": "C", "value": 5}],
    ],
}

timeline = Timeline()
for idx, time_point in enumerate(links_timeline["time_points"]):
    sankey = (
        Sankey()
        .add(
            "Sankey",
            nodes,
            links_timeline["data"][idx],
            linestyle_opt=opts.LineStyleOpts(color="source", opacity=0.7),
            label_opts=opts.LabelOpts(position="right"),
        )
        .set_global_opts(
            title_opts=opts.TitleOpts(title=f"Sankey - {time_point}"),
            visualmap_opts=opts.VisualMapOpts(
                orient="horizontal", pos_top="10%", pos_left="10%"
            ),
        )
    )
    timeline.add(sankey, time_point)

timeline.render("dynamic_sankey.html")

在这个例子中,我们使用 Timeline 来创建时间轴,并在不同时间点展示不同的桑基图。通过逐步变化的数据,我们可以形象地展示数据在时间上的变化过程。

结合真实数据的桑基图案例

为了更好地说明 Pyecharts 绘制桑基图的实际应用,让我们结合一个真实的案例,使用真实的数据进行桑基图的绘制。在这个案例中,我们将使用一个销售流程的数据来展示不同阶段之间的关系和流向。

from pyecharts.charts import Sankey
from pyecharts import options as opts

# 真实销售流程数据
nodes = [
    {"name": "Lead"},
    {"name": "Contacted"},
    {"name": "Prospect"},
    {"name": "Negotiation"},
    {"name": "Closed"},
]

links = [
    {"source": "Lead", "target": "Contacted", "value": 120},
    {"source": "Contacted", "target": "Prospect", "value": 80},
    {"source": "Prospect", "target": "Negotiation", "value": 40},
    {"source": "Negotiation", "target": "Closed", "value": 20},
]

# 绘制桑基图
sankey = (
    Sankey()
    .add(
        "Sales Flow",
        nodes,
        links,
        linestyle_opt=opts.LineStyleOpts(color="source", opacity=0.7),
        label_opts=opts.LabelOpts(position="right"),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="Sales Process Sankey"))
)

sankey.render("sales_process_sankey.html")

在这个例子中,我们使用了销售流程的数据,其中包括了从潜在客户(Lead)到最终成交(Closed)的不同阶段。通过绘制桑基图,我们可以清晰地看到各个阶段之间的流向,帮助销售团队更好地理解销售流程。
在这里插入图片描述

导出和分享

Pyecharts 提供了多种导出图表的方式,可以将生成的桑基图保存为图片或 HTML 文件。这样可以方便地分享给团队成员或将图表嵌入到报告中。

# 将桑基图保存为图片
sankey.render("sales_process_sankey.png")

# 或者保存为 HTML 文件
sankey.render("sales_process_sankey.html")

通过以上的例子,你可以灵活地运用 Pyecharts 绘制桑基图,并根据实际需求进行定制和优化。希望这些案例能够帮助你更好地使用 Pyecharts 进行桑基图的数据可视化工作。

进阶应用:桑基图与其他图表的组合

在数据可视化的实际应用中,有时候我们需要将桑基图与其他类型的图表结合起来,以更全面地呈现数据的多个方面。以下是一个例子,演示了如何将桑基图与柱状图结合起来,展示销售流程中每个阶段的数量。

from pyecharts.charts import Sankey, Bar
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode

# 真实销售流程和数量数据
nodes = [
    {"name": "Lead"},
    {"name": "Contacted"},
    {"name": "Prospect"},
    {"name": "Negotiation"},
    {"name": "Closed"},
]

links = [
    {"source": "Lead", "target": "Contacted", "value": 120},
    {"source": "Contacted", "target": "Prospect", "value": 80},
    {"source": "Prospect", "target": "Negotiation", "value": 40},
    {"source": "Negotiation", "target": "Closed", "value": 20},
]

# 销售阶段数量数据
sales_data = [120, 80, 40, 20]

# 绘制桑基图
sankey = (
    Sankey()
    .add(
        "Sales Flow",
        nodes,
        links,
        linestyle_opt=opts.LineStyleOpts(color="source", opacity=0.7),
        label_opts=opts.LabelOpts(position="right"),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="Sales Process Sankey"))
)

# 绘制柱状图
bar = (
    Bar()
    .add_xaxis(["Lead", "Contacted", "Prospect", "Negotiation", "Closed"])
    .add_yaxis("Sales Quantity", sales_data, label_opts=opts.LabelOpts(position="top"))
    .set_global_opts(title_opts=opts.TitleOpts(title="Sales Quantity Bar Chart"))
)

# 将桑基图和柱状图组合在一起
page = (
    sankey.overlap(bar)
    .render("combined_sankey_bar_chart.html")
)

在这个例子中,我们使用 overlap 方法将桑基图与柱状图叠加在一起,以便同时展示销售流程的关系和每个阶段的数量。这样的组合图表可以提供更全面的信息,帮助观众更好地理解数据。

总结

本篇技术博客介绍了Pyecharts绘制桑基图的多种炫酷效果,并提供了实际案例和代码示例。通过学习这些技巧,你可以更好地应用Pyecharts进行桑基图的定制和展示。在实际应用中,根据数据的特点和需求,可以选择适合的样式和组合方式,以有效传达数据的信息。希望这篇博客对你在数据可视化中的工作有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/361581.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

知识点积累系列(四)Kubernetes篇【持续更新】

云原生学习路线导航页(持续更新中) 本文是 知识点积累 系列文章的第四篇,记录日常学习中遇到的 Kubernetes 相关的知识点 1.Kubernetes琐碎知识点 1.1.为什么要有annotations annotation中除了能够记录一些额外信息,还可以解决k…

几种常见的vcruntime140_1.dll无法继续执行代码弹窗错误解决办法

vcruntime140_1.dll是Windows操作系统中的一个动态链接库文件,用于支持C程序和应用程序的运行,有时可能会遇到以下错误信息:“vcruntime140_1.dll无法继续执行代码”。本文将详细介绍这个常见问题的原因,并提供相应的解决办法。 一…

安装 vant-ui 实现底部导航栏 Tabbar

本例子使用vue3 介绍 vant-ui 地址:介绍 - Vant 4 (vant-ui.github.io) Vant 是一个轻量、可定制的移动端组件库 安装 通过 npm 安装: # Vue 3 项目,安装最新版 Vant npm i vant # Vue 2 项目,安装 Vant 2 npm i vantlatest-v…

Linux服务器根据服务端口号杀死对应服务

获取服务pid 输入命令 ss -tulnp | grep :16522输出 tcp 表示连接的类型是TCP。LISTEN 表示端口正在监听连接。第一个数字 0 是 Recv-Q(接收队列),表示当前接收队列中已由网络接收但还未被进程读取的数据的数量。第二个数字 128 是 Send-Q&…

使用moment实现数字转秒数和递进分钟和小时

使用moment实现数字转秒数和递进分钟和小时 效果图引用包js 功能:不满一分钟展示秒数,满一分钟展示分秒,满一小时展示时分秒 效果图 引用包 "moment": "^2.24.0", "moment-duration-format": "^2.3.2&q…

springboot+AOP+自定义注解+RBAC自定义操作权限管理01

springbootAOP自定义注解RBAC自定义操作权限管理01!今天 做了内容是该自定义权限管理系统的前奏。第一小节内容。搭建了一个基础的springboot项目,和数据库的三张表。 tb_user;tb_role;tb_roel_user。实现了一个基础的,用户和角色表的联动查询。为了后续…

uniapp如何安装uview

1.下载并导入插件 打开链接 uView2.0重磅发布,利剑出鞘,一统江湖 - DCloud 插件市场 没有的登录的就先登录 导入成功后,可见 2. 添加配置 main.js import uView from /uni_modules/uview-ui Vue.use(uView) uni.scss import /uni_module…

(M)UNITY三段攻击制作

三段攻击逻辑 基本逻辑: 人物点击攻击按钮进入攻击状态(bool isAttack) 在攻击状态下, 一旦设置的触发器(trigger attack)被触发,设置的计数器(int combo)查看目前攻击…

Mastercam 2024 下载安装教程,流程简单,小白也能轻松搞定,附安装包和工具

前言 Mastercam是一款高效专业的实用型CAD/CAM设计辅助工具,集二维绘图、三维实体造型、曲面设计、体素拼合、数控编程、刀具路径模拟及真实感模拟等多种功能于一身,能够帮助用户轻松设计各种复杂的曲线、曲面零件、刀具路径等。 准备工作 1、Win10及…

小米笔记本电脑共享屏幕到苹果手机,这里有两个方法

相信大家都知道苹果手机投屏到小米笔记本电脑的方法,今天分享一下将电脑投屏到苹果手机的操作。 你可以选择安装软件或不安装软件。 安装软件的方法: 第一步,在小米笔记本电脑和苹果手机都安装AirDroid Cast,两台设备连接同一个网…

Linux/ScriptKiddie

Enumeration nmap 第一次扫描发现系统对外开放了22和5000端口,端口详细信息如下 22端口运行着openssh,5000端口则是werkzeug的httpd,tittle是kids hacker tools TCP/5000 首先从5000端口开始,先访问站点,站点是一个…

码多多ChatAI智能聊天系统:打造智能营销

产品介绍: 码多多ChatAI智能聊天系统是一款基于人工智能技术的聊天机器人,具备自然语言处理、情感识别和多轮对话能力。该系统可应用于客户服务、营销推广和市场调查等领域,提供实时、高效的人工智能交互体验。同时,码多多ChatAI支持个性化定…

2024美赛数学建模C题思路+代码

文章目录 1 赛题思路2 美赛比赛日期和时间3 赛题类型4 美赛常见数模问题5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 美赛比赛日期和时间 比赛开始时间:北京时间2024年2月2日(周五&#xff…

【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏3(附项目源码)

本节最终效果演示 文章目录 本节最终效果演示系列目录前言库存系统素材绘制简单的库存UI控制库存开关实现物品拖拽功能拾取物品添加更多物品 源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏…

Linux实验记录:远程控制服务

前言: 本文是一篇关于Linux系统初学者的实验记录。 参考书籍:《Linux就该这么学》 实验环境: VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 备注: SSH(Secure Shell&…

【Python基础018】在程序中怎么实现自定义抛出异常

在上一节中,我们讲了如何对程序中的异常进行处理,但这是针对程序在运行过程中系统自动抛出的异常,而让程序被动的抛出异常在实践中也具有重要作用。 1、raise语句抛出异常 raise 语句可以使用一个类(必须是 Exception 或者 Excep…

C++-内存管理(1)

1. C/C内存分布 首先我们需要知道,在C中的内存分为5个区。 1. 栈 又叫堆栈 -- 非静态局部变量 / 函数参数 / 返回值等等,栈是向下增长的。 2. 内存映射段 是高效的 I/O 映射方式,用于装载一个共享的动态内存库。用户可使用系统接口 创建…

解说 AIGC(人工智能生成内容) 是什么?

前言 AIGC (AI Generated Content)即人工智能生成内容,一般认为是相对于PCG(专业生成内容)、UCG(用户生成内容)而提出的概念。AIGC狭义概念是利用AI自动生成内容的生产方式。广义的AIGC可以看作是像人类一样具备生成创造能力的AI技术,即生成式AI,它可以基于训练数据和生成算法…

漏洞原理SSRF漏洞

漏洞原理SSRF漏洞 服务器请求伪造 SSRF(Server Side Request Forgery)是一种服务器端请求伪造漏洞。它允许攻击者利用后端服务器来发送未经授权的请求。攻击者可以通过修改请求的目标地址,将请求发送到内部网络或其他受信任的服务器上,从而绕过防火墙和访问控制。 SSRF漏洞…

redis使用Big key的问题

文章目录 BigKey带来的问题业务场景具体现象解决思路 BigKey带来的问题 客户端执行命令的时延变大:对大Key进行的慢操作会导致后续的命令被阻塞,从而导致一系列慢查询。 引发操作阻塞:Redis内存达到maxmemory参数定义的上限引发操作阻塞或重…