Echarts+D3气泡图

Echarts+D3气泡图(相邻效果,气泡之间不叠加)

在这里插入图片描述

<template><div ref="chart" style="width: 500px; height: 500px"></div>
</template><script setup>
import * as echarts from 'echarts/core'
import { DatasetComponent, TooltipComponent, VisualMapComponent } from 'echarts/components'
import { CustomChart } from 'echarts/charts'
import { CanvasRenderer } from 'echarts/renderers'
echarts.use([DatasetComponent, TooltipComponent, VisualMapComponent, CustomChart, CanvasRenderer])
import * as d3 from 'd3'
import { ref, onMounted } from 'vue'const chart = ref(null)const colorList = ['#5470c6','#91cc75','#fac858','#ee6666','#73c0de','#3ba272','#fc8452','#9a60b4','#ea7ccc'
]let option = {}
let seriesData = [{depth: 1,id: 'city',index: 0,value: 2},{depth: 1,id: 'city.孝感',index: 6,value: 6},{depth: 1,id: 'city.武汉',index: 1,value: 36},{depth: 1,id: 'city.荆州',index: 2,value: 26},{depth: 1,id: 'city.咸宁',index: 3,value: 16},{depth: 1,id: 'city.仙桃',index: 4,value: 6},{depth: 1,id: 'city.潜江',index: 5,value: 10},{depth: 1,id: 'city.十堰',index: 6,value: 8}
]let displayRoot = stratify1()function stratify1() {return d3.stratify().parentId(function (d) {return d.id.substring(0, d.id.lastIndexOf('.'))})(seriesData).sum(function (d) {return d.value || 0}).sort(function (a, b) {return b.value - a.value})
}function overallLayout(params, api) {let context = params.contextd3.pack().size([api.getWidth() - 2, api.getHeight() - 2]).padding(0)(displayRoot)context.nodes = {}displayRoot.descendants().forEach(function (node) {context.nodes[node.id] = node})
}function renderItem(params, api) {let context = params.contextlet idx = params.dataIndex// Only do that layout once in each time `setOption` called.// 每次调用“setOption”时,只能进行一次布局。if (!context.layout) {context.layout = trueoverallLayout(params, api)}let nodePath = api.value('id')let nodeName = nodePath.slice(nodePath.lastIndexOf('.') + 1).split(/(?=[A-Z][^A-Z])/g).join('\n')let node = context.nodes[nodePath]if (node.id === 'city') {node.r = 0}if (!node) {// Reder nothing.return}let colorTop = colorList[idx % colorList.length]let colorBottom = colorList[(idx + 1) % colorList.length]// 创建线性渐变对象let linearGradient = new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: colorTop },{ offset: 1, color: colorBottom }])//   // 创建线性渐变对象//   let linearGradient = new echarts.graphic.LinearGradient(0, 0, 0, 1, [//     {//       offset: 0,//       color: 'rgb(55, 255, 255)' // 渐变起始颜色//     },//     {//       offset: 0.5,//       color: 'rgb(155, 105, 255)' // 渐变起始颜色//     },//     {//       offset: 1,//       color: 'rgb(255, 0, 255)' // 渐变结束颜色//     }//   ])let z2 = api.value('depth') * 2return {type: 'circle',shape: {cx: node.x,cy: node.y,r: node.r},// transition: ['shape'],z2: z2,textContent: {type: 'text',style: {// transition: isLeaf ? 'fontSize' : null,text: nodeName,fill: '#fff',fontFamily: 'Arial',width: node.r * 1.3,overflow: 'truncate',fontSize: node.r / 3},emphasis: {style: {overflow: null,fontSize: Math.max(node.r / 3, 12)}}},textConfig: {position: 'inside'},style: {fill: linearGradient},emphasis: {style: {fontFamily: 'Arial',fontSize: 12,shadowBlur: 20,shadowOffsetX: 3,shadowOffsetY: 5,shadowColor: 'rgba(0,0,0,0.3)'}}}
}option = {dataset: {source: seriesData},tooltip: {},hoverLayerThreshold: Infinity,series: [{type: 'custom',colorBy: 'data',renderItem: renderItem,progressive: 0,coordinateSystem: 'none',encode: {tooltip: 'value',itemName: 'id'}}]
}const initEcharts = () => {const myChart = echarts.init(chart.value)myChart.setOption(option)
}onMounted(() => {initEcharts()
})
</script>

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

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

相关文章

不同用户同时编辑商品资料导致的db并发覆盖

背景 这个问题的背景来源于有用户反馈&#xff0c;他在商品系统中对商品打的标签不见了&#xff0c;影响到了前端页面上商品的资料显示 不同用户编辑同一商品导致的数据覆盖问题分析 查询操作日志发现用户B确实编辑过商品资料&#xff0c;并且日志显示确实打上了标签&#x…

前端从普通登录到单点登录(SSO)

随着前端登录场景的日益复杂化和技术思想的不断演进&#xff0c;前端在登录方面的知识结构变得越来越复杂。对于前端开发者来说&#xff0c;在日常工作中根据不同的登录场景提供合适的解决方案是我们的职责所在&#xff0c;本文将梳理前端登录的演变过程。 1、无状态的HTTP H…

【面试题】webpack的五大核心、构建流程、性能优化

【面试题】webpack的五大核心、webpack的构建流程、webpack的性能优化 webpack是什么?webpack的五大核心webpack的构建流程webpack性能优化 webpack是什么? js静态模块打包工具。 功能 将多个文件打包成更小的文件&#xff0c;(压缩)翻译 babal-loader es6进行降级兼容。 …

合泰HT66F2390----定时器中断学习笔记

前言 无需多言 直接开始定时器中断 的学习 通过上次的PWM学习&#xff0c;上次用的是周期型TM定时器模块 这次使用标准型TM定时器模块&#xff08;STM&#xff09; 代码 #include <HT66F2390.h>void Timer0_Init(void){_stm0c0 0b00001000;_stm0c1 0b11000001;_stm…

基于巨控GRM561/562/563Y西门子1200PLC发邮件

巨控GRM560,GRM600系列同比之前的GRM530&#xff0c;除短信&#xff0c;微信&#xff0c;电话语音播报增加了邮件发送功能&#xff0c;简单介绍一下PLC发邮件。 1在博途中建立好DB块 2.打开GRMDEV6&#xff0c;新建工程&#xff0c;做好数据采集&#xff0c;这里以DB4.D0&#…

三大数学软件之Maple

相信钻研数学的小伙伴们对MATLAB、SPSS这样的重量级软件并不陌生&#xff0c;这些大型软件能求解复杂的运算&#xff0c;解决各领域的数学问题。今天博主为大家带来了一款名不见经传的软件——Maple&#xff0c;作为三大数学软件之一&#xff0c;Maple同样拥有不菲的计算能力&a…

栈和队列之队列

1.队列 1.1队列的概念 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出 FIFO(First In First Out) 入队列&#xff1a;进行插入操作的一端称为队尾 出队列&#xff1a;进行删除操作的一端称为队…

Git 撤销修改

如果我们在我们的工作区写了很长时间代码&#xff0c;发现出现错误&#xff0c;想回退到之前的版本&#xff0c;这时改怎么做呢&#xff1f; 情况一&#xff1a;对于工作区的代码&#xff0c;还没有 add 我们当然也可以使用git diff 查看与上次提交的差异&#xff0c;进行手动删…

【场景题】让你设计一个订单号生成服务,该怎么做?

方案 当设计订单号生成服务时&#xff0c;我们需要考虑唯一性、数据量、可读性、基因法、可扩展性、高性能和高可用性等多个方面。根据这些考虑&#xff0c;一个简单的订单号生成服务设计方案可以采取以下措施&#xff1a; 使用Snowflake算法或第三方分布式ID生成器&#xff…

PackagesNotFoundError:学习利用报错信息找到解决方法

反思&#xff1a;之前看到报错经常是直接复制报错信息去网上搜&#xff0c;但很多情况下报错信息里其实就给出了解决方案 报错信息&#xff1a; Collecting package metadata (current_repodata.json): done Solving environment: unsuccessful initial attempt using frozen …

FRM模型十五:净值归因之Fama_French三因子模型

文章目录 一、起源二、构建因子三、投资组合的净值归因1. 市场因子2. 规模因子3.价值因子4. 基于净值的归因方法 三、代码实现 一、起源 在多因子模型推出之前&#xff0c;CAPM模型被视为资产定价的第一标准。随着市场不断发展&#xff0c;发现了越来越多CAPM模型无法解释的现…

超详细的Scrapy框架的基本使用教程

Scrapy的介绍 scrapy的工作流程&#xff08;重点&#xff01;&#xff01;&#xff01;&#xff09; 如下图所示&#xff1a; 爬虫&#xff1a; 负责向引擎提供要爬取网页的URL&#xff0c;引擎会把这个URL封装成request对象并传递给调度器&#xff0c;把引擎传递过来的resp…

安卓app软件开发的费用

我们公司总结的开发价格根据安卓APP&#xff0c;苹果APP行业的报价&#xff0c;开发的APP软件费用主要受到两个方面的影响。安卓和苹果APP软件应用的复杂性&#xff0c;第二个是定制开发的APP软件&#xff0c;开发成本和人员的投入成本&#xff0c;以下就是不同的报价费用是怎么…

面试经典150题【51-60】

文章目录 面试经典150题【51-60】71.简化路径155.最小栈150.逆波兰表达式求值224.基本计算器141.环形链表2.两数相加21.合并两个有序链表138.随机链表的复制19.删除链表的倒数第N个节点82.删除链表中的重复元素II 面试经典150题【51-60】 71.简化路径 先用split(“/”)分开。然…

四平方和 刷题笔记

/* 四平方和 直接暴力搜索 可能会超时 使用二分辅助搜索 先枚举出 c*cd*d并存入数组 用式子算出 a*ab*b还剩下多少查找sum数组里面是否存在符合条件的数 查找方式使用二分搜索 当逼近答案后 检查一下是否为所需的数 如果是 直接输出 */ #include <cstring> #includ…

rabbitmq基础(1)

1、背景 能实现消息队列的框架软件有很多&#xff0c;kafka、rabbitmq、RocketMq、activeMq、Redis&#xff08;非专业&#xff09;&#xff0c;各有各的特点和优缺点。但是之前的公司数据需求规模并非很大&#xff0c;所以采用rabbitmq作为消息队列。 2、rabbitMq的基础架构…

C++面试宝典【配文档,全方面学习】

原word文档[链接: https://pan.baidu.com/s/1CKnm7vHDmHSDskAgxgZgKA?pwdr4wv 提取码: r4wv 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 --来自百度网盘超级会员v5的分享] 一、C / C基础 1、简述C的内存分区&#xff1f; 一个C、C程序的内存分区主要有5个…

使用html网页播放多个视频的几种方法

前言 因为项目测试需要&#xff0c;我需要可以快速知道自己推流的多路视频流质量&#xff0c;于是我想到可以使用html网页来播放视频&#xff0c;实现效果极其简单&#xff0c;方法有好几种&#xff0c;以下是几种记录&#xff1a; 注意&#xff1a;测试过&#xff0c;VLC需要使…

Ubuntu18.04运行ORB-SLAM3

ORB-SLAM3复现(ubuntu18) 文章目录 ORB-SLAM3复现(ubuntu18)1 坐标系与外参Intrinsic parameters2 内参Intrinsic parameters2.1 相机内参① 针孔模型Pinhole② KannalaBrandt8模型③ Rectified相机 2.2 IMU内参 3 VI标定—外参3.1 Visual calibration3.2 Inertial calibration…

STM32类别概述、下载程序及启动过程分析

STM32类别概述、下载程序及启动过程分析 STM32类别STM32下载程序STM32启动过程分析 STM32类别 STM32 目前总共有 5 大类&#xff0c;18 个系列 结合 STM32F1 的芯片来说&#xff0c;其 CMSIS 应用程序的简单结构框图&#xff0c;不包括实时操作系统和 中间设备等组件&#xf…