首页 > 其他分享 >vue2实现数据聚合【scatter-clustering】组件封装

vue2实现数据聚合【scatter-clustering】组件封装

时间:2023-05-02 22:34:30浏览次数:51  
标签:clustering 10 item text CLUSTER let vue2 data scatter

实现如下效果:

效果展示:https://code.juejin.cn/pen/7228568245148581943

如果不会请移步到官网的栗子,请点击查看

直接给大家上代码:

  • 整体代码片段
 1 <template>
 2     <div ref="echarts" style="width: 100%; height:300px;"></div>
 3 </template>
 4 <script>
 5 /* eslint-disable */
 6 import { setClusterOption } from "@/util/clusterConfig";
 7 import ecStat from 'echarts-stat';
 8  
 9 export default {
10     name: 'ClusterDom',
11     props: ["simulationList", "pieCount"],
12     data() {
13         return {
14         }
15     },
16     mounted() {
17         this.$nextTick(() => {
18             this.loadBars();
19         });
20     },
21     methods: {
22         loadBars() {
23             this.$nextTick(function () {
24                 let myChart = this.$echarts.init(this.$refs.echarts) // 绘制图表
25                 this.$echarts.registerTransform(ecStat.transform.clustering);
26  
27                 // 指定图表的配置项和数据
28                 let text = "", axisData = [];
29  
30                 if(this.simulationList.length){
31                     this.simulationList.forEach((item, index) => {
32                         axisData[index] = item.map(Number);
33                     });
34                 }
35  
36                 text = `聚类分布模拟呈现`;
37                 let option = setClusterOption(text, axisData, this.pieCount);
38  
39                 // 使用刚指定的配置项和数据显示图表。
40                 myChart.setOption(option);
41                 window.addEventListener('resize', function () {
42                     setTimeout(function () {
43                         myChart.resize();
44                     }, 200)
45                 });
46             });
47         }
48     }
49 }
50 </script>
View Code
  • clusterConfig.js
 1 import color from '@/util/colorConfig.js';
 2  
 3 // 散点图
 4 export const setClusterOption = (text, data, pieCount) => {
 5   const CLUSTER_COUNT = pieCount;
 6   const DIENSIION_CLUSTER_INDEX = 2;
 7   let colorArr = color.slice(0, pieCount);
 8  
 9   let option = {
10     title: {
11       text,
12       textStyle: {
13         color: "#666",
14         fontSize: 16,
15         fontWeight: "normal",
16         top: "0"
17       }
18     },
19     dataset: [
20       {
21         source: data
22       },
23       {
24         transform: {
25           type: 'ecStat:clustering',
26           config: {
27             clusterCount: CLUSTER_COUNT,
28             outputType: 'single',
29             outputClusterIndexDimension: DIENSIION_CLUSTER_INDEX
30           }
31         }
32       }
33     ],
34     tooltip: {
35       position: 'top'
36     },
37     visualMap: {
38       show: false,
39       type: 'piecewise',
40       top: 'middle',
41       min: 0,
42       max: CLUSTER_COUNT,
43       left: 10,
44       splitNumber: CLUSTER_COUNT,
45       dimension: DIENSIION_CLUSTER_INDEX
46     },
47     grid: {
48       top: "15%",
49       left: "0",
50       // right: "0",
51       bottom: "0",
52       containLabel: true
53     },
54     xAxis: {},
55     yAxis: {},
56     series: {
57       type: 'scatter',
58       encode: { tooltip: [0, 1] },
59       symbolSize: 10,
60       itemStyle: {
61         borderColor: '#555'
62       },
63       data: data.map(item => {
64         return {
65           value: item,
66           itemStyle: {
67             normal: {
68               color: colorArr[item.pop()],
69             },
70           }
71         }
72       }),
73       datasetIndex: 1
74     }
75   };
76   return option;
77 }
View Code
  • colorConfig.js
 1 let colorArr = [
 2     '#4EADFF',
 3     '#55D9FA',
 4     '#9CA5E9',
 5     '#2E98F3',
 6     '#5FCAD2',
 7     '#69C97F',
 8     '#F2CA30',
 9     '#FFA97A',
10     '#DAC4AA',
11     '#CF98E9',
12     '#F6B4DE',
13     '#F37379',
14     '#98ACC3',
15     '#75E4C1',
16     '#BEDC63',
17     '#98CFD0',
18     '#9B92F1',
19     '#26A479',
20     '#6068B3',
21     '#AE9E42',
22     '#D17952'
23 ];
24 
25 export default colorArr;
View Code

鉴定完毕,欢迎友们一起交流学习!!

 

标签:clustering,10,item,text,CLUSTER,let,vue2,data,scatter
From: https://www.cnblogs.com/liushihong21/p/17365930.html

相关文章

  • 用vue2封装轮播图组件
    日常练习用vue2封装轮播图组件,传入图片信息数组。实现思想:图片组添加translate动画,通过轮播到第几张图片作为参数,让图片组整体移动。Carousel.vue<template><divclass="carousel"><divclass="carouselList"><!--图片列表--><ulclass="img&quo......
  • vue2源码-十七、Vue组件间传值的方式及之间区别
    Vue组件间传值的方式及之间区别通过props传递:父组件传递数据给子组件使用//chilid,vueprops:{//字符串形式name:String//接收的类型参数//对象形式age:{type:Number,//接收的类型为数值defaule:18,//默认值为18r......
  • Vue2.0和3.0区别
    一、项目初始化2.0初始化,vueinit<模板名称(webpack比较常用)>[项目名称]vueinitwebpackcli2-test3.0初始化,vuecreate[项目名称]vuecreatecli3-test二、目录结构对比2.0目录结构 3.0目录结构 3.0版本中项目环境变量配置文件没有了(dev.env.js/prod.env.js......
  • Vue2.0版本升级到vue3.0
    vue版本的升级主要步骤:一、首先需要卸载你之前的vue2.0版本输入cmd–>回车–>进入dos界面输入命令查询vue的版本:vue-Vorvue-Version输入命令卸载目前vue版本:npmuninstall-gvue-cli再输入vue版本查询命令,提示“不是可执行的命令”则表示卸载成功了。二、安装新......
  • vue2源码-十六、异步组件
    异步组件Vue中异步组件的写法有很多,主要用作大的组件异步加载的markdown组件editor组件。就是先渲染一个注释标签,等组件加载完毕,最后再重新渲染forceUpdate(图片懒加载)使用异步组件会配合webpack原理:异步组件默认不会调用Vue.extend()方法所有Ctor上没有cid属性,没有cid属......
  • Vue2实现部分页面使用rem布局
    1.计算rem值的比例,这里是1920的设计图;setRem(){/***@file:index.vue*@method:setRemPc*@param:*@return:*@description:计算rem大小*@date:*/varwhdef=100/1920;//表示1920的设计图,使用100PX的默认值varbodyWidth=document.body.cli......
  • vue2实现饼图Pie组件封装
    实现如下效果: 如果不会请移步到官网的栗子,请点击查看直接给大家上代码:整体代码片段1<template>2<divref="echarts"style="width:100%;height:300px;"></div>3</template>4<script>5/*eslint-disable*/6import{setPieOpt......
  • vue2 input防抖功能
    1.在el-input绑定@input事件 2.在data中定义timer为null 3.在methods中定义@input绑定的方法 4.在setTimeout中调用对应处理的方法<el-inputstyle="width:140px;color:#FF8900"size="small"v-model="singleDiscountForm.discount"@input="inputDis......
  • 安装多个NodeJS windows上安装多个Nodejs版本 解决vue2/vue3同时运行
    第一步下载nvm-windowsnvm-windows下载地址:Github最新下载地址进入之后直接下载第二步安装NVM注意路径一定不要包含空格中文否则会报错注意安装路径一定不要包含空格中文否则会报错 点击安装之后如果之前安装了nodejs的话会提示希望nvm管理已安装node版本吗点击是......
  • vue2与vue3的区别
    一.vue2和vue3双向数据绑定原理发生了改变vue2的双向数据绑定是利用ES5的一个APIObject.definePropert()对数据进行劫持结合发布订阅模式的方式来实现的。vue3中使用了es6的ProxyAPI对数据代理。相比于vue2.x,使用proxy的优势如下defineProperty只能监听某个属性,不......