不重叠且分布均匀的气泡图解决方案(基于echarts)

2023-10-27

      气泡图是数据可视化需求中的一种常见图表形式。然而截至目前,像echarts,d3,higncharts都还没有直接提供一个配置来完成不重叠且分布均匀的气泡图这项工作。幸运的是,我们可以通过配置echart的关系图来完成我们的气泡图需求。

     下面是完成后的气泡图效果(数据加载后有一个动画效果,而且气泡支持拖动,下方动图不和谐的地方为鼠标拖动):

     最终稳定之后的效果如下:

    为了有更好的适用性,这里把绘制气泡图的操作都封装到了一个函数里面。以Vue项目为例,要完成这个气泡图的配置所需步骤如下:

    1:npm下载echarts模块。

    2:在main.js文件中引入关系图相关的模块,并把echart主模块绑定到vue原型对象上,以便后续调用,代码如下:
 

// 引入 EChart 主模块
let echarts = require('echarts/lib/echarts')
// 引入图表
require('echarts/lib/chart/graph');

Vue.prototype.$chart = echarts

    3: 编写气泡图的配置函数,具体代码如下:

    // 入参说明: 
    // 1. data 原始气泡数据,是一个对象数组,形如[{name: '可乐', amount: 49}]
    // 2. format 数组依次指定气泡中展示的名称以及影响气泡大小的数据值, 形如['name', 'amount']
    // 3. dom 气泡图绘制所需要的dom id名
    initBubbleChart (data = [], format = [], dom) {
      let [maxValue, temp] = [0, []]
      data.forEach(item => {
        temp.push(item[format[1]])
      })
      maxValue = Math.max.apply(null, temp)

      // 气泡颜色数组
      let color = [
        '#FFB600', '#886CFF', '#0084FF',
        '#4CB690','#58B458', '#6C6C6C',
        '#F56161', '#FC754C','#5F5EEC'
      ]
      // 气泡颜色备份
      let bakeColor = [...color]
      // 气泡数据
      let bubbleData  = []
      // 气泡基础大小
      let basicSize = 70
      // 节点之间的斥力因子,值越大,气泡间距越大
      let repulsion = 380
      // 根据气泡数量配置基础大小和斥力因子(以实际情况进行适当调整,使气泡合理分布)
      if (data.length >= 5 && data.length < 10) {
        basicSize = 50
        repulsion = 230
      }
      if (data.length >= 10 && data.length < 20) {
        basicSize = 40
        repulsion = 150
      } else if (data.length >= 20) {
        basicSize = 30
        repulsion = 75
      }

      // 填充气泡数据数组bubbleData
      for (let item of data) {
        // 确保气泡数据条数少于或等于气泡颜色数组大小时,气泡颜色不重复
        if (!bakeColor.length) bakeColor = [...color]
        let colorSet = new Set(bakeColor)
        let curIndex = Math.round(Math.random()*(colorSet.size - 1))
        let curColor = bakeColor[curIndex]
        colorSet.delete(curColor)
        bakeColor = [...colorSet]
        // 气泡大小设置
        let size = (item[format[1]] * basicSize * 2) / maxValue
        if (size < basicSize) size = basicSize

        bubbleData.push({
          "name": item[format[0]],
          "value": item[format[1]],
          "symbolSize": size,
          "draggable": true,
          "itemStyle": {
              "normal": {"color": curColor}
          }
        })
      }

      let bubbleId = document.getElementById(dom)
      let bubbleChart = this.$chart.init(bubbleId)
      let bubbleOptions = {
          backgroundColor: '#fff',
          animationEasingUpdate: 'bounceIn',
          series: [{
              type: 'graph',
              layout: 'force',
              force: {
                  repulsion: repulsion,
                  edgeLength: 10
              },
              // 是否开启鼠标缩放和平移漫游
              roam: false,
              label: {normal: {show: true}},
              data: bubbleData
          }]
      }
      bubbleChart.setOption(bubbleOptions)
    }

    4:  在模板中加一个标签用于提供气泡图所需的dom,如下所示:

<div id="bubble" style="width: 500px;height: 380px;border: 1px solid #dadada"></div>

    5: 准备测试数据,并调用initBubbleChart 方法,如下所示:

let data = [
  {label: '可乐', amount: 100},
  {label: '雪碧', amount: 70},
  {label: '土豆', amount: 30},
  {label: '饼干', amount: 50}
]
this.initBubbleChart(data, ['label', 'amount'], 'bubble')

     完成之后就可以看到一开始的效果了。这里绘制气泡图的方法,可以根据指定的气泡数据中的某个值去相对的设置气泡大小,同时还支持自定义气泡的颜色。(这里不建议通过一个随机函数去获取气泡颜色,因为这样随机的颜色组合起来大都是无法搭配的,所以这里建议自己挑颜色,或者让UI给你8,9种颜色,这样整个气泡图才会有一个比较好的展示效果)。

    下面我们看一下,不同气泡数据量下的一个展示效果图(气泡基础大小,间距,还有颜色可以自己去定义):

 

     随着气泡数量的增多,上面的整体展示效果还是可以的。同时也可以看到,气泡的数据量不宜过多,否则会显得比较拥挤。有关echarts关系图的更多配置可以移步echarts官网。本次不重叠且分布均匀的气泡图解决方案介绍就到此结束了,有任何疑问可与博客下方留言。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不重叠且分布均匀的气泡图解决方案(基于echarts) 的相关文章

  • seaborn可视化库分析库基础01 - 布局、参数、色板等

    Seaborn库简介 Seaborn库官网 正如你所知道的 Seaborn是比Matplotlib更高级的免费库 特别地以数据可视化为目标 但他要比这一切更进一步 他解决了用Matplotlib的2个最大问题 正如Michael Wasko
  • 神了!7行代码建起360亿的支付帝国

    点击上方 小詹学Python 选择 星标 公众号 超级无敌干货每日12 00推送给你 大数据文摘出品 来源 medium 编译 lin 夏雅薇 去年 根据CBInsights和普华永道联合发表的MoneyTree 2019Q1报告显示 支付
  • Jupyterlab使用plotly图片不显示解决方法

    问题 anaconda装好了plotly库 进入lab画图 发现不管怎样都显示空白 无法显示图片 解决方法 这是因为没有安装渲染支持的插件 在命令行输入 首先需要安装nodejs12 0 0以上版本 conda install nodejs
  • Python疫情数据爬取与可视化

    使用Python爬取腾讯新闻疫情数据 并使用pyecharts可视化 绘制增长人数地图 柱状图 折线图 文章目录 1 分析网页 2 导入模块 3 抓取数据 4 提取数据并写入Excel 5 国内各地区现有确诊人数地图 6 国内各地区现有确诊
  • 国内工业数字化进程的推进,难点在哪里?

    推进工业数字化进程 通常称为工业 4 0 或工业物联网 IIoT 可能是一项复杂且具有挑战性的工作 在此过程中 经常会遇到一些困难和障碍 包括 1 遗留系统 许多工业设施仍然依赖于未考虑数字化设计的遗留设备和系统 将这些旧系统与现代数字技术
  • 编程实战(3)——python绘制极坐标雷达图

    编程实战 3 python绘制极坐标雷达图 文章目录 编程实战 3 python绘制极坐标雷达图 综述 绘图代码和解析 绘制一张多主体雷达图 预处理 封闭雷达图 绘制图像 绘制多张单主体雷达图 建立子图 循环遍历画每个子图 综述 pytho
  • 数据可视化之Seaborn(1)

    文章目录 什么是Seaborn seaborn提供的一些特点 Seaborn的基本使用 1 安装seaborn 2 导入seaborn库并导入Seaborn内置数据集 3 设置画图空间风格 4 设置子图风格 5 去除图脊 边框 6 设置内容
  • 基于元数据的数据治理分析功能说明

    数据对于企业来说是非常重要的 因为企业数据需要保证其完整性和准确性 所以需要数据治理 MDM基础数据平台是对各个业务系统的主数据进行治理 而各个业务系统中的业务数据则需要在DAP数据分析平台进行治理 DAP数据分析平台通过与ESB应用集成平
  • 帆软大屏开发手册

    1 需求调研 模块 输出 业务需求调研 业务需求调研报告 硬件调研 大屏采购硬件清单 数据调研 数据质量调研报告 关键性技术预研 技术预研报告 1 1 业务需求调研 1 1 1 根据业务场景抽取关键指标 关键指标是一些概括性词语 是对一组或
  • 医学图像2D/3D可视化 ITK-SNAP软件使用

    软件下载链接 ITK SNAP Home 1 导入医学图像 nii gz文件 File gt Open Main Image 点击 Browse 切记不能有中文路径 gt Next 2 载入相应的分割图数据 nii gz文件 Segment
  • echarts实现气泡图(气泡之间不叠加)

    前言 echarts本身是有气泡图的 官方气泡图的特点是每个气泡的位置是基于坐标轴进行定位 如图1和2所示 但是本文所介绍的气泡图并不是官方所介绍的气泡图 而是一类区别于官方的图表类型 这种图表类型通常采用d3 js插件实现 如图3所示 从
  • 爬取豆瓣电影数据并进行分析可视化

    学习爬虫爬取豆瓣电影数据并进行分析 整体流程如下 1 爬取豆瓣电影数据 2 读取豆瓣电影数据 3 统计各个电影的评论数 4 读取某个电影的全部评论内容 5 获取某个电影的关键词并生成词云图 6 对电影数据的关键词和评分进行辩证分析并生成热力
  • Echarts的tooltip显示自定义格式化解决方案

    前言 今天甲方爸爸提出了要求 需要把图表显示的数据保留百分数的小数点后一位 实际上这个显示的问题之前在后台处理数据的时候就处理过 当时是没有保留小数的 后来要求保留小数点后一位就在后台处理了 谁知道 在前台展示的时候 莫名的出现小数点后十几
  • 火山翻译亮相飞书未来无限大会,打造全新翻译体验

    5月19日下午 2021春季飞书未来无限大会在北京召开 火山翻译携带火山同传 VolctransGlass AR智能翻译眼镜现身大会展厅 让观众了解前沿翻译技术和方案 并体验机器翻译如何在日常生活 工作和重要会议上帮助人们实现无障碍交流 本
  • PCL 点云按高程渲染颜色

    目录 一 算法原理 二 代码实现 三 结果展示 四 CloudCompare 五 备注 一 算法原理 首先按照Z轴方向求取所在点云的高程极值 包括高程最大值与最小值 计算高程中值 然后选取渲染的红 绿 蓝三种颜色的值 最后 自上而下 为红绿
  • pyecharts的各个系列配置项设置示例——个人整理与分享

    由于在使用pyecharts时我们有很多对图表的配置项设置需要用到全局配置项和系列配置项 因此在对pyecharts的图表进行介绍之前先进行个人在pyecharts官网对系列配置项学习的整理 因为个人在官网对代码的查看没有特别舒服 其中包含
  • bokeh python_Python Bokeh数据可视化教程

    bokeh python Bokeh is an interactive Python data visualization library which targets modern web browsers for presentatio
  • Python pyecharts数据可视化

    Python pyecharts数据可视化 绘制精美图表 一 数据可视化 1 pyecharts介绍 2 初入了解 1 快速上手 2 简单的配置项介绍 3 案例实战 1 柱状图Bar 2 地图Map 省份 城市 地区 3 饼图Pie Pie
  • 2021-05-03

    一 R中安装 phyloseq 的方法 很多网上的教程使用的都是 source https bioconductor org biocLite R biocLite phyloseq 但是我尝试了很多次 最后还是没有成功 下面能成功安装 p
  • 航空港务数据大屏为航空港的可持续发展提供有力支撑!

    随着经济的发展 不断加建与扩建民用机场 空港行业规模不断扩大 在不断引进和消化发达国家先进技术的同时 中国深入开展了对新技术和新材料的研究 极大地丰富和发展了中国的机场建设技术 且各项机场建设计划均已落实推进 行业在经济发展的推动下欣欣向荣

随机推荐

  • x264的参考帧管理机制

    x264介绍 X264是一款研究的是H 264编码的开源代码软件 相比JM而言 其编码性能有很大的提高 其支持大多数H 264的特性工具 包括 CABAC和 CAVLC高效嫡编码 多参考帧预测 所有的帧内预测宏块类型 16x6l和4x4 所
  • 官宣——BSV工程师能力认证项目在CSDN推出线上学习平台

    去年11月 上海可一澈科技有限公司 以下简称 可一科技 与CSDN联合推出了BSV区块链开发工程师能力认证项目 以下简称 BSV工程师认证 今天 BSV工程师认证项目正式推出一个全新的线上学习平台 并发布首门课程 比特币协议与设计 本次推出
  • LDO基础知识:噪声 - 降噪引脚如何提高系统性能

    使用低压降稳压器 LDO 来过滤开关模式电源产生的纹波电压并不是实现清洁直流电源的唯一考虑因素 由于 LDO 是电子器件 因此它们会自行产生一定量的噪声 选择低噪声 LDO 并采取措施来降低内部噪声对于生成不会影响系统性能的清洁电源轨而言不
  • PYQT的最新界面代码

    This Python file uses the following encoding utf 8 import sqlite3 import traceback from PyQt5 QtGui import QMouseEvent Q
  • springboot入门简单使用

    springboot入门简单使用 1 SpringBoot项目创建并配置mysql数据库 创建项目 编写Controller测试 配置数据库 2 SpringBoot集成mybatis plus 初始化数据库 安装mybatis plus
  • 使用 imshow() 绘制矩阵

    使用 imshow 绘制矩阵 基础的展示效果 import matplotlib pyplot as plt import numpy as np mat np arange 0 100 reshape 10 10 plt imshow m
  • linux文件编程(4)—— 用ANSIC标准C库函数进行文件编程:fopen、fread、fwrite、fseek

    参考 linux文件编程 5 用ANSIC标准中的C库函数进行文件编程 作者 丶PURSUING 发布时间 2021 04 11 11 58 25 网址 https blog csdn net weixin 44742824 article
  • 深度优先搜索的框架

    深度优先搜索 最少分支找到答案 一 准备 1 节点间的relationship 2 列表lst 存放遍历结果 3 集合set 去重 二 结构 函数递归 def dfs root 1 首先判断根节点是否为空节点 if root is None
  • Python学习笔记-Python 变量类型

    变量是存储在内存中的值 这就意味着在创建变量时会在内存中开辟一个空间 变量赋值 Python 中的变量赋值不需要类型声明 每个变量在使用前都必须赋值 变量赋值以后该变量才会被创建 等号 用来给变量赋值 等号 运算符左边是一个变量名 等号 运
  • 【解决问题】mybatis-plus想要修改某字段为null问题

    背景 最近将框架的mybits换为mybits plus 然后在调用updateById时候 想让某个字段修改null 一直失败 问题 mybits plus调用updateById时候 想让某个字段修改null 一直失败 问题原因 myb
  • 2022最新个人所得税计算(附代码)

    相信大家一定很在意下面的三个问题 个人所得税怎么计算 年终奖如何扣税 五险一金如何计算 通过这篇文章 我们用实际例子来计算我们需要交的税 一 个人所得税怎么计算 第一步 计算全年收入 年终奖除外 做个假设 比如 博主上班后 开的工资是30k
  • React + antd +DatePicker组件禁用小于当下时间之前的时间,包括时,分

    一 DatePicker组件的设置 showTime设置时间只显示时 分 不显示秒 disabledDate函数 设置日期的禁用 disabledTime函数 设置时间的禁用
  • Centos 8 安装向日葵(sunloginclient-10.0.0-1)

    1 去官网下载最新的安装包 下载地址 2 准备安装 下面的问题可能遇到 但愿你们遇不到 如果没遇到问题 直接 rpm ivh sunloginclient 10 0 1 24347 amd64 rpm root yaco ls opt to
  • JavaScript中对象的简单使用实例(String、Math、Date、Array)

    String对象使用 JavaScript中的字符串对象 和字符串的常用方法 var s string 查看目标字符串是否可以匹配一个字符串 如果可以 则返回该字符串 否则返回空 alert s match str 返回字符出现的位置 al
  • 【设计模式】观察者模式

    观察者模式是一种行为型设计模式 它定义了一种一对多的依赖关系 当一个对象的状态发生改变时 其所有依赖者都会收到通知并自动更新 当对象间存在一对多关系时 则使用观察者模式 Observer Pattern 比如 当一个对象被修改时 则会自动通
  • vite项目 router/indext.ts 中引入 views/**/*.vue 页面后报错的解决方法

    报错现象 view 文件夹下新建文件夹 新建的文件夹下新建view页面 路由文件中引入views vue 页面时出现了报错 报错现象如下 解决方法 在 tsconfig app json 文件中添加 src vue 注意 添加保存后报错可能
  • uniapp 动态修改 tabbar 的高度

    项目中使用了原生的tabbar tabbar的修改提供了两个API 看了 html5 plus的文档 没有看到可以修改tabbar的部分
  • js正则表达式去除空行

    表单文本域中的内容可能有时候会存在空行 但我们保存时并不想要多余的空行 所以要想办法去掉它 只需要一个简单的正则表达式即可 n n n n
  • (易懂)Mybatis中${}和#{}的区别和使用注意

    目录 一 区别 1 使用字符串拼接的方式拼接sql 如果数据是字符串类型或日期 我们需要手动加引号 而 会自动加上引号 2 安全 不安全 容易造成sql注入 sql注入就是改变sql的语法规则 进行sql命令攻击 3 是经过预编译的 是安全
  • 不重叠且分布均匀的气泡图解决方案(基于echarts)

    气泡图是数据可视化需求中的一种常见图表形式 然而截至目前 像echarts d3 higncharts都还没有直接提供一个配置来完成不重叠且分布均匀的气泡图这项工作 幸运的是 我们可以通过配置echart的关系图来完成我们的气泡图需求 下面