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

news2024/12/26 23:30:53

文章目录

  • 深入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进行桑基图的定制和展示。在实际应用中,根据数据的特点和需求,可以选择适合的样式和组合方式,以有效传达数据的信息。希望这篇博客对你在数据可视化中的工作有所帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java】创建一个SpringBoot项目

软件版本:IDE专业版 一、创建 创建项目时,要注意的有下面几点 1、 为了使用JDK1.8,我们在创建时用阿里云国服,将Server URL : https://start.spring.io/ 或者http://start.springboot.io/更改为:https:/…

Linux-正则表达式

1.正则表达式的定义: 正则表达式通常用于判断语句中,使用字符串描述、匹配一系列符合某个规则的字符串。 正则表达式是由普通字符与元字符组成。 普通字符包括小写字母、数字、标点符号及一些其他符号。元字符是指在正则表达式中具有特殊意义的专用字符&…

redis 极简分布式锁实现

写在前面 工作中遇到,整理 reids 做简单分布式锁的思考博文适合刚接触 redis 的小伙伴理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是…

二百二十一、HiveSQL报错:return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask

一、目的 在运行HiveSQL时,执行报错 tatement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask 二、在yarn上查看任务报错 The required MAP capability is more than the supported max container capability in t…

springboot3+vue支付宝在线支付案例-解决跨域请求的问题

springboot3vue支付宝在线支付案例-解决跨域请求的问题!为了使用外网地址,跨域请求业务接口。我们需要设置一个类。配置一下。 我们采用的方案是。借助于 WebMvcConfigurer package com.example.demo.config;import org.springframework.context.annot…

MySQL前百分之N问题--percent_rank()函数

PERCENT_RANK()函数 PERCENT_RANK()函数用于将每行按照(rank - 1) / (rows - 1)进行计算,用以求MySQL中前百分之N问题。其中,rank为RANK()函数产生的序号,rows为当前窗口的记录总行数 PERCENT_RANK()函数返回介于 0 和 1 之间的小数值 selectstudent_…

Git安装,Git镜像,Git已安装但无法使用解决经验

git下载地址&#xff1a; Git - 下载 (git-scm.com) <-git官方资源 Git for Windows (github.com) <-github资源 CNPM Binaries Mirror (npmmirror.com) <-阿里镜像&#xff08;推荐&#xff0c;镜…

Android studio打包apk比较大

1.遇到的问题 在集成linphone打包时发现有118m&#xff0c;为什么如此之大额。用studio打开后发现都是c不同的pu架构。 2.解决办法 增加ndk配置&#xff0c;不选配置那么多的cpu结构&#xff0c;根据自己需要调整。 defaultConfig { applicationId "com.matt.linphoneca…

线性代数---------学习总结

线性代数之行列式 行列式的几条重要的性质 1.某两行某两列交换位置之后&#xff0c;值变号 2.行列式转置&#xff0c;值不变 3.范德蒙德行列式&#xff0c;用不同行的公比做一系列的累乘运算 4.把某一行的行列式加到另一行上&#xff0c;利用他们之间的倍数关系&#xff0…

(十)springboot实战——springboot3下的webflux项目mysql数据库事务处理

前言 WebFlux 是 Spring Framework 5.0 中引入的一种新型反应式编程模型&#xff0c;支持非阻塞 I/O&#xff0c;适用于高并发、高吞吐量的应用程序。在 WebFlux 应用程序中使用事务需要注意以下几点。使用 Reactive R2DBC&#xff1a;WebFlux 支持使用 Reactive R2DBC 访问关…

20240130在ubuntu20.04.6下给GTX1080安装最新的驱动和CUDA

20240130在ubuntu20.04.6下给GTX1080安装最新的驱动和CUDA 2024/1/30 12:27 缘起&#xff0c;为了在ubuntu20.4.6下使用whisper&#xff0c;以前用的是GTX1080M&#xff0c;装了535的驱动。 现在在PDD拼多多上了入手了一张二手的GTX1080&#xff0c;需要将安装最新的545的驱动程…

JavaScript-for循环的执行顺序

1.目标 掌握for执行顺序 2.实现思路 使用for循环输出0-到5 3.代码实现 Document 4.总结 for执行顺序 1.执行 var i 0 变量初始化 条件判断 是否成立 成立 执行循环体 不成立 退出for循环

GC8838取代DRV8838直流电机驱动芯片,可应用在摄像机,玩具等产品上

GC8838 一款 12V 直流电机驱动芯片&#xff0c;为摄像机、消费类产品、玩具和其他低压或者电池供电的运动控制类应用提供了集成的电机驱动解决方案。芯片一般用了驱动一个直流电机或者使用两颗来驱动步进电机。 可以工作在 0~12V 的电源电压上&#xff0c;能提供高达 1.5A 持续…

「优选算法刷题」:只出现一次的数字Ⅱ

一、题目 给你一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。 示例 1&#xff1a; 输入&#xff1a;nums …

蓝桥杯AT24C02问题记录

问题1&#xff1a;从这个图片上可以看出这两个在IIC的.c文件里延时时间不一样&#xff0c;第一张图使用了15个_nop_(); 12M晶振机器周期是 1/12M*121uS&#xff1b;nop()要延时1个指令周期。延时时间不对会对时序产生影响&#xff0c;时序不对&#xff0c;则AT24C02有没被使用…

百度输入法往选字框里强塞广告

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 国内几乎100%的输入法都有广告&#xff0c;只是你们没发现而已&#xff01;&#xff01;&#xff01; 百度输入法居然在输入法键盘上推送广告&#xff0c;近日&#xff0c;博主阑夕 表示&#xff0c;V2EX论坛上有…

什么是DDOS流量攻击,DDoS防护安全方案

随着互联网的发展普及&#xff0c;云计算成新趋势&#xff0c;人们对生活方式逐渐发生改变的同时&#xff0c;随之而来的网络安全威胁也日益严重&#xff01; 目前在网络安全方面&#xff0c;网络攻击是最主要的威胁之一&#xff0c;其中DDoS攻击是目前最为常见的网络攻击手段…

Kafka 记录

推荐资源 官网http://kafka.apache.org/Githubhttps://github.com/apache/kafka书籍《深入理解Kafka 核心设计与实践原理》 Kafka 架构 Kafka使用ZooKeeper作为其分布式协调框架&#xff0c;其动态扩容是通过ZooKeeper来实现的。Kafka使用Zookeeper保存broker的元数据和消费者信…

Ubuntu22.04 网络图标突然消失

本来好好的&#xff0c;突然就发现没有网络了&#xff0c;图标也不见了。 特别是Ubuntu虚拟机&#xff0c;容易出现此问题。 修复办法 1. sudo service network-manager stop2. sudo rm /var/lib/NetworkManager/NetworkManager.state3. sudo service network-manager start到…

快速理解MoE模型

最近由于一些开源MoE模型的出现&#xff0c;带火了开源社区&#xff0c;为何&#xff1f;因为它开源了最有名气的GPT4的模型结构&#xff08;OPEN AI&#xff09;&#xff0c;GPT4为何那么强大呢&#xff1f;看看MoE模型的你就知道了。 MoE模型结构&#xff1a; 图中&#xff0…