vue+echarts实现桑吉图的效果

前言:

        在我们项目使用图形的情况下,桑吉图算是冷门的图形了,但是它可以实现我们对多级数据之间数据流向更好的展示的需求,比如,我们实际数据流向中,具有1对多,多对多的情况下,如果用tree是不合适,用思维导图的话,只能实现线路的展示,达不到我们想对数据可视化的需要。

实现效果:

实现代码:

1、初始化调用方法

echarts挂载点击事件: radarChart.getZr().on

echarts随着界面的变动自动适应:window.onresize

源码:

let chartDom = document.getElementById("radar")
let radarChart = echarts.init(chartDom)//配置属性值radarChart.setOption(option.value)//挂载点击事件radarChart.getZr().on("click", event=> {// 第三层文字点击事件if (event.topTarget?.type === "tspan") {const text = event.topTarget.style.textif(text.indexOf('/') !== -1){console.log(event);console.log(text);}}})//让echarts随着界面的变动自动适应
window.onresize = () => {radarEcharts.resize()}

2、配置属性

注意1:echarts通用的用网格的方法添加内边距,在桑吉图是无效的

grid: {top: "0",left: "10%",right: "10%",bottom: "0",containLabel: true,
}

//  桑吉图中添加内边距的特殊方法

series: {
      type: "sankey",
      top: "1%",           // 距离上 距离
      bottom: "1%",      // 距离下 距离
      left: "0",                  // 距离左 距离
      right: "16.5%",          // 距离右 距离

...

注意2:桑吉图中文字内容是可以自定义的,但是排版是固定的,不会自定义生成距离

注意3:桑吉图的数据中通过  depth  这个字段来控制他是第几层

源码:

option.value = {tooltip: {trigger: "item",triggerOn: "mousemove",rich: {"a": {"fontSize": 14,"fontWeight": 500,'color':'#fff',padding: [0, 0, 5, 0],}},// 鼠标滑上去的展示信息formatter: function(params) {if (params.data.source) {return `${params.data.source}-${params.data.target}:${params.data.value}`;} else {return `${params.name}:${params.value}`;}}},series: {type: "sankey",layout: "none",top: "1%",bottom: "1%",left: "0",right: "16.5%",draggable: false,focusNodeAdjacency: 'allEdges', // 鼠标划上时高亮的节点和连线,allEdges表示鼠标划到节点上点亮节点上的连线及连线对应的节点lineStyle: {opacity: 0.3,color: "gradient",curveness: 0.7,},label: {color: "#000",fontSize: 15,formatter: function (params) {// 一级 硕士研究生 博士研究生if(params.data.depth === 0 && params.data.name==='本科生') return "{a|" + params.data.name + "\n}" +"{b|" + params.data.value+ "}";if(params.data.depth === 0 && params.data.name==='硕士研究生') return "{a2|" + params.data.name + "\n}" +"{b2|" + params.data.value+ "}";if(params.data.depth === 0 && params.data.name==='博士研究生') return "{a3|" + params.data.name + "\n}" +"{b3|" + params.data.value+ "}";// 二级if(params.data.depth === 1) return "{c|" + params.data.name + "}" +"{d|" + params.data.value+ "}";// 三级if(params.data.depth === 2){let str = ''params.data.typeArr.forEach(item=>{// str += "{e|" + params.data.name + "/"+ item.typeName +"\n}"+"{f|" + item.value+ "\n}"str += "{m|" + params.data.name + "/"+ item.typeName +"}"+"{n|" + item.value+ "\n}"})return str;}},rich: {"a": {"fontSize": 14,"fontWeight": 500,'color':'#7BA2DF',padding: [0, 0, 5, 0],},"b": {"fontSize": 24,"fontWeight": 600,'color':'#7BA2DF',padding: [0, 0, 0, 0],},"a2": {"fontSize": 14,"fontWeight": 500,'color':'#BA86ED',padding: [0, 0, 5, 0],},"b2": {"fontSize": 24,"fontWeight": 600,'color':'#BA86ED',padding: [0, 0, 0, 0],},"a3": {"fontSize": 14,"fontWeight": 500,'color':'#59DEC6',padding: [0, 0, 5, 0],},"b3": {"fontSize": 24,"fontWeight": 600,'color':'#59DEC6',padding: [0, 0, 0, 0],},"c": {"fontSize": 16,"color": "#332D2D","lineHeight": 20,},"d": {"fontSize": 16,"fontWeight": 600,"lineHeight": 20,"color": "#332D2D ",padding: [0, 0, 0, 2],},"e": {"fontSize": 14,"fontWeight": 500,'color':'#332D2D',padding: [0, 0, 5, 0],},"f": {"fontSize": 16,"fontWeight": 600,'color':'#332D2D',padding: [0, 0, 20, 0],},"m": {"fontSize": 14,"fontWeight": 500,'color':'#332D2D',padding: [0, 0, 0, 0],},"n": {"fontSize": 16,"fontWeight": 600,'color':'#332D2D',padding: [0, 0, 0, 10],},},},// nodeWidth:100,nodeGap: 20, // 每一组之间的距离layoutIterations: 0,// 自动优化列表,尽量减少线的交叉,为0就是按照数据排列emphasis: {focus: "adjacency",},data: allData,links: allGuideData,},}

3、测试数据填入:

// 测试数据1let allData= [{ name: "本科生",value:430, itemStyle: { color: "#7BA2DF" }, depth: 0 },{ name: "硕士研究生",value:60, itemStyle: { color: "#BA86ED" }, depth: 0 },{ name: "博士研究生",value:60, itemStyle: { color: '#59DEC6' }, depth: 0 },{ name: "预防医学",value:60, itemStyle: { color: '#5FD981' }, depth: 1 },{ name: "综合楼",value:60, itemStyle: { color: "#00baff" }, depth: 1 },{ name: "2022级",typeArr:[{typeName:"本科",value:50},{typeName:"硕士研究生",value:30}], itemStyle: { color: "#f8b551" }, depth: 2 },{ name: "2021级",typeArr:[{typeName:"硕士研究生",value:50}], itemStyle: { color: "#7ecef4" }, depth: 2 },{ name: "2023级",typeArr:[{typeName:"博士研究生",value:50}], itemStyle: { color: "#7ecef4" }, depth: 2 },]// 测试数据2,连线let allGuideData = [// L1→L3	 4509{ source: "本科生", target: "预防医学", value: 800 },// L2→L3	 12196{ source: "硕士研究生", target: "预防医学", value: 200 },// L1→L2→L3	 2404{ source: "综合楼", target: "2022级", value: 200 },{ source: "综合楼", target: "2023级", value: 200 },{ source: "博士研究生", target: "2022级", value: 300 },{ source: "预防医学", target: "2021级", value: 400 },{ source: "预防医学", target: "2023级", value: 100 },]

4、更多,官方api:

官方api有关桑吉图apiicon-default.png?t=N7T8https://echarts.apache.org/zh/option.html#series-sankey.type

更多桑吉图资料icon-default.png?t=N7T8https://www.ppchart.com/#/

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

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

相关文章

深入理解mysql的explain命令

1 基础 全网最全 | MySQL EXPLAIN 完全解读 1.1 MySQL中EXPLAIN命令提供的字段包括: id:查询的标识符。select_type:查询的类型(如SIMPLE, PRIMARY, SUBQUERY等)。table:查询的是哪个表。partitions&…

《Java 并发编程艺术》笔记(上)

如何减少上下文切换 减少上下文切换的方法有无锁并发编程、CAS算法、使用最少线程和使用协程。 无锁并发编程:多线程竞争锁时,会引起上下文切换,所以多线程处理数据时,可以用一些办法来避免使用锁。如将数据的 ID 按照 Hash 算法…

空对象指针为什么有时候能调用成员函数

在谈这个话题之前呢,还是得了解一下内存布局,以x86的32位系统为例: 然后得明确一点,NULL指针是无法访问的,如果强行访问,则会引发异常 然而空对象指针有时候却能够调用成员函数 class C { public:int a;st…

kali linux下可用的wine QQ/微信

kali linux下可以使用网页版本的 QQ/微信。但是体验差强人意,无法截图,无法发送word中的复制文字,反而能发送excel表格中的复制文字,无法拖拽发送等多种难以接受的体验。 所以尝试wine 版本,好处是通过交叉编译&#…

【华为OD题库-078】查字典-Java

题目 输入一个单词前缀和一个字典,输出包含该前缀的单词 输入描述: 单词前缀字典长度字典 字典是—个有序单词数组 输入输出都是小写 输出描述: 所有包含该前缀的单词,多个单词换行输出 若没有则返回-1 示例1 输入: b 3 a b c 输出: b 示例2 输入: abc 4…

multipartFile转file类型方法

1:在Java中,可以通过MultipartFile对象的transferTo()方法将文件保存到本地临时文件中,并使用该临时文件创建一个File对象,进而得到File类型的文件 import org.springframework.web.multipart.MultipartFile; import java.io.Fil…

【linux系统编程】编辑器gcc/g++

目录 Linux下的编辑器 介绍: 1,编辑器gcc/g 1-1,系统的编译过程 1-2,预处理过程 1-3,编译过程 1-4,汇编过程 1-5,链接过程 Linux下的编辑器 介绍: Linux系统下可支持很多高…

Python读写txt文件数据

🎈 博主:一只程序猿子 🎈 博客主页:一只程序猿子 博客主页 🎈 个人介绍:爱好(bushi)编程! 🎈 创作不易:如喜欢麻烦您点个👍或者点个⭐! &#x1f…

html和css写淘宝的快速导航条

目录 1、css代码 2、html代码 1、css代码 <style>* {margin: 0;padding: 0;list-style: none;text-decoration: none;}.nav {width: 900px;height: 40px;background-color: rgb(247, 249, 250);margin: 50px auto;padding-left: 30px;}.nav>li {float: left;width: 1…

说说maven有什么优缺点?

Maven是一个流行的Java项目管理和构建工具&#xff0c;它可以帮助开发人员更有效地管理项目依赖关系、构建项目和部署代码。下面我将详细介绍Maven的优缺点&#xff1a; 优点&#xff1a; 一致性和标准化&#xff1a;Maven提供了一套标准的构建和项目管理工具&#xff0c;使得…

电力工程设计手册 全套31本

书号书名定价出版社名称9787519824358电力工程设计手册 01 火力发电厂总图运输设计200.00中国电力出版社9787519829780电力工程设计手册 02 火力发电厂热机通用部分设计210.00中国电力出版社9787519826994电力工程设计手册 03 火力发电厂锅炉及辅助系统设计290.00中国电力出版社…

云天励飞即将亮相“双数峰会”

第二届数字政府建设峰会暨数字湾区发展论坛即将在12月8-10日举办。本次“双数”峰会上&#xff0c;云天励飞将与CEC联合展示&#xff0c;重点展出大模型在数字政府领域的创新应用&#xff0c;以及云天励飞自主研发的大模型推理芯片。 “云天天书”包含通用大模型、行业大模型、…

昇腾npu上构建modelbox webUI开发容器教程

官方提供了modelbox webUI教程&#xff0c;但是&#xff0c;该教程有以下缺点&#xff1a; 在容器刚启动时&#xff0c;配置中的访问控制列表没有包含本地PC的IP&#xff0c;这导致如果想从本地PC访问远程服务器上容器的webUI&#xff0c;需要登入容器修改配置文件&#xff0c…

GO设计模式——2、工厂方法模式(创建型)

目录 工厂方法模式&#xff08;Factory Method Pattern&#xff09; 工厂模式的核心角色 优缺点 代码实现 工厂方法模式&#xff08;Factory Method Pattern&#xff09; 工厂方法模式&#xff08;Factory Method Pattern&#xff09;又叫作多态性工厂模式&#xff0c;指的…

Kali Linux 2023.4 已经发布了!

开发人员推出了 Kali Linux 2023.4&#xff0c;这是2023 年发行版的第四个也是最后一个版本。 新产品已经可供下载&#xff0c;包含15 个新工具和 GNOME 45。 Offective Security 团队报告称&#xff0c;在今年的最终版本中&#xff0c;操作系统中并没有添加太多新功能&…

什么是海牙公约?

一、什么是海牙公约&#xff1f; "海牙公约" 通常是指1899年和1907年两次在海牙举行的国际和平会议所达成的一系列国际公约。这两次会议的目标是通过国际合作来促进和平、防止战争&#xff0c;并制定一些规则和原则&#xff0c;以限制武装冲突的影响。以下是其中两个…

用 C 写一个卷积神经网络

用 C 写一个卷积神经网络 深度学习领域最近发展很快&#xff0c;前一段时间读transformer论文《Attention Is All You Need》时&#xff0c;被一些神经网络和深度学习的概念搞得云里雾里&#xff0c;其实也根本没读懂。发现深度学习和传统的软件开发工程领域的差别挺大&#xf…

Vue开发中,在实现单页面应用(SPA)前端路由时的hash模式和history模式的区别及详细介绍

一、前言 单页面应用(SPA)的核心思想之一&#xff0c;就是更新视图而不重新请求页面&#xff0c;简单来说&#xff0c;它在加载页面时&#xff0c;不会加载整个页面&#xff0c;只会更新某个指定的容器中的内容。对于大多数单页面应用&#xff0c;都推荐使用官方支持的vue-rou…

动态代理配置方法。如何使用代理IP保护隐私安全?

随着网络技术的不断发展&#xff0c;越来越多的人开始使用代理IP来保护自己的隐私安全。代理IP是一种通过代理服务器来访问网络的特殊技术&#xff0c;可以隐藏用户的真实IP地址&#xff0c;从而保护用户的隐私。本文将介绍动态代理的配置方法以及如何使用代理IP保护隐私安全。…

PyTorch 基础篇(1):Pytorch 基础

Pytorch 学习开始 入门的材料来自两个地方&#xff1a; 第一个是官网教程&#xff1a;WELCOME TO PYTORCH TUTORIALS&#xff0c;特别是官网的六十分钟入门教程 DEEP LEARNING WITH PYTORCH: A 60 MINUTE BLITZ。 第二个是韩国大神 Yunjey Choi 的 Repo&#xff1a;pytorch-t…