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.rhkb.cn/news/211899.html

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

相关文章

IDEA加载阿里Java规范插件

IDEA加载阿里巴巴Java开发手册插件,在写代码的时候会自动扫描代码规范。 1、打开Settings 2、打开Plugins 3、搜索Alibaba Java Code Guidelines(XenoAmess TPM)插件,点击Install进行安装,然后重启IDE生效。 4、鼠标右…

多人聊天Java

服务端 import java.io.*; import java.net.*; import java.util.ArrayList; public class Server{public static ServerSocket server_socket;public static ArrayList<Socket> socketListnew ArrayList<Socket>(); public static void main(String []args){try{…

大数据可视化项目——基于Python豆瓣电影数据可视化分析系统的设计与实现

大数据可视化项目——基于Python豆瓣电影数据可视化分析系统的设计与实现 本项目旨在通过对豆瓣电影数据进行综合分析与可视化展示&#xff0c;构建一个基于Python的大数据可视化系统。通过数据爬取收集、清洗、分析豆瓣电影数据&#xff0c;我们提供了一个全面的电影信息平台…

系统思考与啤酒游戏经营沙盘

结束一家汽车零配件公司《系统思考与啤酒游戏经营沙盘》的内训课&#xff0c;4个小组基本上都有共同的心智模式&#xff0c;这也代表团队有一些集体的盲点。不仅仅对啤酒游戏经营沙盘做了复盘&#xff0c;同时也借用学员画出的系统环路图完成真实案例的研讨以及团队共识&#x…

宏工科技:电池装备高效交付“唯快不破”

面向TWh时代的锂电设备供应需求&#xff0c;锂电设备向标准化、模块化方向升级的趋势显现。 “近年来&#xff0c;宏工科技聚焦电池匀浆技术创新与规模化降本&#xff0c;通过电池匀浆工艺段的模块化探索与应用&#xff0c;从项目周期、成本、效率等多维度赋能电池前段制造高质…

Ubuntur编译ROS报错:error PCL requires C++14 or above

ubuntu20.04 编译ROS包 报错&#xff1a; error&#xff1a; PCL requires C14 or above&#xff1a; 修改Cmakelists.txt文件&#xff1a; set&#xff08;CMAKE_CXX_STANDARD 14&#xff09; 再次编译成功.

图纸加密防泄密软件排名

图纸作为企业的重要资产&#xff0c;如何保护其安全&#xff0c;防止泄密&#xff0c;成为了企业亟待解决的问题。而图纸加密防泄密软件&#xff0c;正是解决这一问题的有效工具。 一、图纸加密防泄密软件的重要性 图纸加密防泄密软件通过对图纸进行加密处理&#xff0c;使得只…

重估拼多多,TEMU带给拼多多的不止是市值增量

监制 | 何玺 排版 | 叶媛 谁也没有想到&#xff0c;中国电商的格局改变居然如此之快。 12月29日&#xff0c;拼多多市值超越多年雄踞国内电商头把交椅的阿里巴巴&#xff0c;成为美股市值最大中概股。从此时开始&#xff0c;中国电商开始“拼”时代。 拼多多凭什么能超越阿里…

MySQL 包含查询特殊符号数据

当你模糊查询包含特殊符号的数据时&#xff0c;如果不加上特殊处理&#xff0c;查询结果是错误的。 如果你查的数据包含如上字符或者其他特殊字符&#xff0c;需要加上\转义字符。 如下示例&#xff1a; SELECT * FROM t_bc_user t where t.name LIKE %\_%

qt 5.15.2 主窗体菜单工具栏树控件功能

qt 5.15.2 主窗体菜单工具栏树控件功能 显示主窗体效果&#xff1a; mainwindow.h文件内容&#xff1a; #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QFileDialog> #include <QString> #include <QMessageBox>#inc…

基于GUI+Swing+MySQL开发的聊天室设计

基于GUISwingMySQL开发的聊天室设计 项目介绍&#x1f481;&#x1f3fb; 本项目是基于Java Swing的聊天室设计&#xff0c;旨在为用户提供一个便捷、高效的在线交流平台。在这个项目中&#xff0c;我们实现了以下几个主要功能&#xff1a; 1. 服务器启动成功&#xff1a;当用户…

Java实现动态加载的逻辑

日常工作中我们经常遇到这样的场景&#xff0c;某某些逻辑特别不稳定&#xff0c;随时根据线上实际情况做调整&#xff0c;比如商品里的评分逻辑&#xff0c;比如规则引擎里的规则。 常见的可选方案有: JDK自带的ScriptEngine 使用groovy&#xff0c;如GroovyClassLoader、Gro…

【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(1)spring boot项目搭建、vue项目搭建、微信小程序项目搭建

项目笔记为项目总结笔记,若有错误欢迎指出哟~ 【项目专栏】 【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(1)项目搭建 持续更新中… java+vue+微信小程序项目】从零开始搭建——健身房管理平台 项目简介Java项目搭建(IDEA)1.新建项目2.项目类型3.项目设置4…

react native 环境准备

一、必备安装 1、安装node 注意 Node 的版本应大于等于 16&#xff0c;安装完 Node 后建议设置 npm 镜像&#xff08;淘宝源&#xff09;以加速后面的过程&#xff08;或使用科学上网工具&#xff09;。 node下载地址&#xff1a;Download | Node.js设置淘宝源 npm config s…

【T+】畅捷通T+软件安装过程中停留在:正在配置产品位置或进度80%位置。

【问题描述】 畅捷通T软件在安装过程中&#xff0c; 进度条一直停留在【正在配置产品…】位置。 【解决方法】 打开【任务管理器】&#xff0c;想必这个如何打开&#xff0c;大家应该都会。 在【进程】中找到【DBConfig.exe】或者【Ufida.T.Tool.SM.DBConfig.exe】进程并结束…

【keil备忘录】2. stm32 keil仿真时的时间测量功能

配置仿真器Trace内核时钟为单片机实际的内核时钟&#xff0c;需要勾选Enable设置&#xff0c;设置完成后Enable取消勾选也可以&#xff0c;经测试时钟频率配置仍然生效&#xff0c;此处设置为48MHZ: 时间测量时必须打开register窗口&#xff0c;否则可能不会计数 右下角有计…

基于瑞芯微rk3588+寒武纪 | 38TOPS INT8算力的AI边缘计算盒子,智能安防、智慧工地、智慧城管、智慧油站

边缘计算盒子 瑞芯微rk3588寒武纪 | 38TOPS INT8算力 ● 采用 Big-Little 大小核架构&#xff0c;搭载四核 A76四核 A55&#xff0c;CPU主频高达 2.4GHz &#xff0c;提供1MB L2 Cache 和 3MB L3 &#xff0c;Cache提供更强的 CPU 运算能力。 ● 高性能四核 Mali-G610 GPU&a…

DAPP开发【06】nodejs安装与npm路径更换

windows系统在执行用户命令时顺序 windows系统在执行用户命令时&#xff0c;若用户未给出文件的绝对路径&#xff0c; 则 &#xff08;1&#xff09;首先在当前目录下寻找相应的可执行文件、批处理文件等&#xff1b; &#xff08;2&#xff09;若找不到&#xff0c;再依次在系…

uni-app 微信小程序之自定义navigationBar顶部导航栏

文章目录 1. 实现效果2. App.vue3. pages.json 配置自定义4. 顶部导航栏 使用 微信小程序自定义 navigationBar 顶部导航栏&#xff0c;兼容适配所有机型 1. 实现效果 2. App.vue 在App.vue 中&#xff0c;设置获取的 StatusBar&#xff0c;CustomBar 高度&#xff08;实现适配…

Stm32_串口的帧(不定长)数据接收

目录标题 前言1、串口中断接收固定帧头帧尾数据1.1、任务需求1.2、实现思路1.3、程序源码&#xff1a; 2、串口中断接收用定时器来判断帧结束3、串口中断接收数据空闲中断3.1、串口的空闲中断3.2、实现思路3.3、程序源码 4、串口的空闲中断DMA转运4.1、DMA简介4.2、DMA模式4.3、…