处理三维数据做图表,比如返回的数据就是一个个list,list里面某几个数据同属于一个维度,项目中的实例效果如下:

  上面的khfx会有多个,比如db1、db2、db3等,下面的那些数据也会变化,目前需求就是做的下面的实现单选,可以使用echarts的legend的selectedMode实现,然后上面的db那些就是可以复选,默认全显示,选择之后就取消该条数据显示。也就是说相当于需要2层图例组件同时控制下面series的显示。

  大值考虑的是下面的用legend的图例,然后上面的图例就自己手写,然后通过js方法去实现类似图例的功能。

  踩坑记录:

  1、刚开始想的就是通过legend的selected设置为false来达到效果(之前处理翻页使用过这种),但是发现不行,设置某一个name为false,会影响到上面图例所有的数据,因为series里的那个name是一样的,但是这个name又必须和legend里的一一对应,所以放弃

  2、考虑先删除比如db1的数据,所以先定义一个存储的数组,来存储删除的数据,因为点击series的线消失,再点击还是要加进去的,这种实现可以。但是有个问题,就是当删除series为[]一个空数组时,下面的图还是会有。在echart的demo里面试一下,发现series:[],不会画图

  解决方案:

  当选中上面图例时,只把series里面的对象的data置为[]空数组,详情看下面的changeLegrend方法,完美实现效果,代码还没优化,碰到类似处理三维图例的需求时,可以参考下

<template>
<div>
<div class="legend_container">
<ul>
<li v-for="item in legendData">
<button class="btn-link btn-legend-item" @click="changeLegrend(item,$event)"><span class="legend-item-bg" :style="'background-color:'+legendColor[item]"></span>{{item}}</button>
</li>
</ul>
</div>
<div id="myLine" :style="{width:'100%',height:'300px'}"></div>
</div>
</template>
<script type="ecmascript-6">
import {getPhyLogiLoadApi} from '@/apis'
export default {
data(){
return {
xData:[],
series:[],
legendData:[],
legendColor:{},
storage:{},
colors:['#5793f3', '#d14a61', '#675bba']
}
},
methods:{
drawLine(){
let myLine = this.$echarts.init(document.getElementById('myLine'));
let option = {
tooltip: {
trigger: 'axis'
},
legend: {
selectedMode:'single'
},
grid: {
left: '3%',
right: '7%',
bottom: '3%',
containLabel: true
},
xAxis: [
{
type: 'category',
axisTick: {
alignWithLabel: true
},
data: this.xData,
name: '快照时间'
}
],
yAxis: [
{
type: 'value',
name: '统计值'
}
],
series: this.series
};
myLine.setOption(option);
window.addEventListener("resize", () => { myLine.resize();});
},
fetchData(){
getPhyLogiLoadApi(this.$store.state.inspection.reportInfo.batch_id).then((res) => {
if(res.status === ){
let _dataArray = res.data,
len = _dataArray.length;
for(let i=;i<len;i++){
if(!this.legendData.includes(_dataArray[i].instance_name)){
this.legendColor[_dataArray[i].instance_name] = this.colors[this.legendData.length];
this.legendData.push(_dataArray[i].instance_name);
}
let _obj = {
name:_dataArray[i].stat_name,
type:'line',
smooth:true,
dbname:_dataArray[i].instance_name,
color:this.legendColor[_dataArray[i].instance_name],
data:_dataArray[i].stat_value.split(',')
}
this.series.push(_obj)
}
this.xData = _dataArray[].snap_time.split(',')
this.drawLine();
}
})
},
changeLegrend(item,e){
let _obj = {},
len = this.series.length,
_data = this.series;
let thisDom = e.currentTarget;
thisDom.classList.toggle('btn-selected');
for(let i = ; i < len; i++){
if(item === _data[i].dbname){
//如果为空,说明被选,置为存储的数据
if(_data[i].data.length === ){
_data[i].data = this.storage[item][_data[i].name]
}else{
//先存数据,再置为空
_obj[_data[i].name] = _data[i].data;
_data[i].data = []
}
}
}
//存储数据
this.storage[item] = _obj;
this.drawLine();
}
},
mounted(){
this.fetchData();
}
}
</script>
<style scoped lang="stylus" rel="stylesheet">
.legend_container{
text-align center
li {
list-style none
display inline
}
}
.btn-link, .btn-link:active, .btn-link:focus, .btn-link:hover {
border-color: transparent;
background-color: transparent;
box-shadow: none;
}
.btn-legend-item {
color: rgb(, , );
padding: 0px;
}
.legend-item-bg {
display:inline-block;
width: 20px;
height: 12px;
margin-right: 5px;
border-radius: 2px;
}
.btn-selected{
opacity 0.3
}
</style>

EChart处理三维数据做图表、多维legend图例处理的更多相关文章

  1. 百度数据可视化图表套件echart实战

    最近我一直在做数据可视化的前端工作,我用的最多的绘图工具是d3.d3有点像photoshop,功能很强大,例子也很多,但是学习成本也不低,做项目是需要较大人力投入的.3月底由在亚马逊工作的同学介绍下使 ...

  2. Webstorm+Webpack+echarts构建个性化定制的数据可视化图表&&两个echarts详细教程(柱状图,南丁格尔图)

    Webstorm+Webpack+echarts   ECharts 特性介绍 ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(I ...

  3. Cocos2d 利用继承Draw方法制作可显示三维数据(宠物三维等)的三角形显示面板

    很久没有写博客了,这段时间比较忙,又是搬家又是做自己的项目,还有太多琐碎的事情缠身,好不容易抽出时间把最近自己做的一些简单例子记录一下. 在我的项目中,我需要一个显示面板来显示游戏中的一个三维数据,例 ...

  4. 要做linux运维工程师的朋友,必须要掌握以下几个工具才行 ...

    要做linux运维工程师的朋友,必须要掌握以下几个工具才行 ...  [复制链接]   发表于 2013-12-13 15:59 | 来自  51CTO网页 [只看他] 楼主           本人 ...

  5. 单击Echart饼图实现数据钻取

    使用场景和需求: 第一层饼图显示党员党龄分布的情况. 点击某个党龄段,查看拥有该党龄段的党支部. 默认显示3个党支部,余下的党支部合并为其它,点击其它,查看余下的党支部. 点击某个党支部,返回第一层饼 ...

  6. Matlab绘制三维曲面(以二维高斯函数为例)

    原文地址为:Matlab绘制三维曲面(以二维高斯函数为例) 寒假学习了一下Python下的NumPy和pymatlab,感觉不是很容易上手.来学校之后,决定继续看完数字图像处理一书.还是想按照上学期的 ...

  7. Python调用matplotlib实现交互式数据可视化图表案例

    交互式的数据可视化图表是 New IT 新技术的一个应用方向,在过去,用户要在网页上查看数据,基本的实现方式就是在页面上显示一个表格出来,的而且确,用表格的方式来展示数据,显示的数据量会比较大,但是, ...

  8. 【笔记】求数据前n个主成分以及对高维数据映射为低维数据

    求数据前n个主成分并进行高维数据映射为低维数据的操作 求数据前n个主成分 先前的将多个样本映射到一个轴上以求使其降维的操作,其中的样本点本身是二维的样本点,将其映射到新的轴上以后,还不是一维的数据,对 ...

  9. 背水一战 Windows 10 (20) - 绑定: DataContextChanged, UpdateSourceTrigger, 对绑定的数据做自定义转换

    [源码下载] 背水一战 Windows 10 (20) - 绑定: DataContextChanged, UpdateSourceTrigger, 对绑定的数据做自定义转换 作者:webabcd 介 ...

随机推荐

  1. laravel windows安装(composer)

    1.安装composer参考windows 安装tp5 composer方式 2.先配置好本地虚拟域名,在cmd里面切换到网站根目录 ... 3.安装成功之后,在浏览器输入已配置的虚拟域名我的是,la ...

  2. 9 行 javascript 代码获取 QQ 群成员

    昨天看到一条微博:「22 行 JavaScript 代码实现 QQ 群成员提取器」. 本着好奇心点击进去,发现没有达到效果,一是 QQ 版本升级了,二是博客里面的代码也有些繁琐. 于是自己试着写了一个 ...

  3. scrapy抓取拉勾网职位信息(五)——代码优化

    上一篇我们已经让代码跑起来,各个字段也能在控制台输出,但是以item类字典的形式写的代码过于冗长,且有些字段出现的结果不统一,比如发布日期. 而且后续要把数据存到数据库,目前的字段基本都是string ...

  4. 最大流 [USACO4.2]草地排水Drainage Ditches

    Background 在农夫约翰的农场上,每逢下雨,贝茜最喜欢的三叶草地就积聚了一潭水.这意味着草地被水淹没了,并且小草要继续生长还要花相当长一段时间.因此,农夫约翰修建了一套排水系统来使贝茜的草地免 ...

  5. Arduino可穿戴教程之第一个程序——上传运行程序(四)

    Arduino可穿戴教程之第一个程序——上传运行程序(四) 2.4.5  上传程序 现在所有Arduino IDE的设置都完成了,我们就可以将示例程序上传到板子中了.这非常简单,只需要单击如图2.45 ...

  6. 光线求交-面、三角形、球 (Ray intersection)

    光线求交 光线定义:position \(a(t)\) = \(o\) + \(t\vec{d}\); 球定义: center p, radius r; 平面定义:normal \(\vec{n}\) ...

  7. 获取token

    获取token 提示:openstack 这个是获取N版的方法 ,主要区别在于这个路径上(http://192.168.0.228:35357/v3/auth/tokens ),以前版本可能会是v2 ...

  8. XPath中的text()和string()区别(转)

    原文地址 : http://blog.csdn.net/jiangchao858/article/details/63314426 本质区别 text()是一个node test,而string()是 ...

  9. HDU 5575 Discover Water Tank 并查集 树形DP

    题意: 有一个水槽,边界的两块板是无穷高的,中间有n-1块隔板(有高度),现有一些条件(i,y,k),表示从左到右数的第i列中,在高度为(y+0.5)的地方是否有水(有水:k = 1),问最多能同时满 ...

  10. Codechef SEP14 QRECT cdq分治+线段树

    题意 支持删除矩阵.插入矩阵.查询当前矩阵与之前有多少个矩阵相交 算相交的时候容斥一下:相交矩形数 = 总矩形数-X轴投影不相交的矩形数-Y轴投影不相交的矩形数-XY轴投影下都不相交的矩形数 最后一项 ...