echarts分组插件echarts.group代码分享

前言

echarts是百度出品的一款很棒的前端图表控件,被评为“百度少有的良心产品”。可以实现散点图、折线图、柱状图、地图、饼图、雷达图、K线图等等几十种常用、不常用的图表,效果酷炫。

示例地址:http://echarts.baidu.com/examples.html

由于近期项目的需要,我开发了一款echarts插件,可以让序列series分组展示,下拉框选择。这样当series较多时,不再被超长的图例legend所困扰,而且可以自带全选功能。

效果

用作示例的数据,产品维度分为衬衫、羊毛衫两个,每个产品具有2016年销量、2017年销量,每个年度销量有1-12月共12个点的数据。

HTML代码如下:

1.没有做分组时,衬衫、羊毛衫的数据混杂在一起,难以辨别。

2.实现分组后,通过右上角的下拉选择产品,还可以选择全部。

用法

//参数说明:
//chartObj:echarts对象,注意不是dom对象
//selector: 下拉框控件jQuery对象
//options: 初始化chartObj的options参数
//groupProperty: 在series中充当分组代码的字段名称
//groupNameOfShowAll: 显示全部的字符串
makeEchartsGroups (chartObj, selector, options, groupProperty, groupNameOfShowAll);

//调用示例:
makeEchartsGroups(myChart, $(‘#dropdown‘), option, "group", "全部");

从这里也能看出,第一,echarts.group依赖于jQuery。第二,它不是一个真正的echarts插件,只是一个js辅助方法。

这也是我下一步要改进的方向,希望各位能献计献策啊。

源代码

送给大家啦,写的不好:-)

 1 var makeEchartsGroups = function (chartObj, selector, options, groupProperty, groupNameOfShowAll)
 2 {
 3     var _chartObj = chartObj;
 4     var _selector = selector;
 5     var _options = options;
 6     var _groupProperty = groupProperty;
 7     var _groupNameOfShowAll = groupNameOfShowAll;
 8     var _groups = [];
 9     var _allSeries = options.series;
10     //每次更新数据所用的空模板
11     var _optionsTmp = deepCopy(options);
12     _optionsTmp.series = [];
13     _optionsTmp.legend.data = [];
14
15     //1. 生成下拉
16     if (_groupNameOfShowAll != undefined) {
17         _groups.push(_groupNameOfShowAll);
18     }
19     for (var i = 0; i < options.series.length; i++) {
20         var gname = options.series[i][groupProperty];
21         if (_groups.indexOf(gname) == -1) {
22             _groups.push(gname);
23         }
24     }
25     for (var i = 0; i < _groups.length; i++) {
26         var gname = _groups[i];
27         $(selector).append(‘<option value="‘ + gname + ‘">‘ + gname + ‘</option>‘);
28     }
29
30     //2. 绑定下拉选择事件
31     $(selector).change(function () {
32         updateChartGroup($(this).val());
33     });
34
35     //3. 初次更新
36     updateChartGroup(_groups[0]);
37
38     //深度拷贝
39     function deepCopy(obj) {
40         return $.extend(true, {}, obj);
41     };
42
43     //更新echarts
44     function updateChartGroup(selectedValue) {
45         var newOptions = deepCopy(_optionsTmp);
46         //push series and legends
47         for (var j = 0; j < _allSeries.length; j++) {
48             if (selectedValue == _groupNameOfShowAll || _allSeries[j][_groupProperty] == selectedValue) {
49                 newOptions.series.push(_allSeries[j]);
50                 newOptions.legend.data.push(_allSeries[j].name);
51             }
52         }
53
54         _chartObj.setOption(newOptions, true);
55     };
56 };

基本原理很简答,就是从options中提取groups,将options中的series做拆分,按照group分组,下拉选择时生成新的options,扔给echarts,就是这样。

如果有需要,还可以对selector方式进行改进,用更炫酷的方式实现分组的选择也是很容易做到的。

在开发中遇到问题,解决问题,并且用一种优雅的方式实现它,最后在这里分享给大家,希望对大家有所帮助。

时间: 2024-10-01 20:27:38

echarts分组插件echarts.group代码分享的相关文章

数据图表插件Echarts(一)

一.引言 最近做一个智慧城市项目,项目中需要图表和报表进行数据分析,从网上找了很多,最后找到了百度开放的echarts,一个很强大的插件. 二.介绍 ECharts,缩写来自Enterprise Charts,商业级数据图表,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器(IE6/7/8/9/10/11,chrome,firefox,Safari等),底层依赖轻量级的Canvas类库ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化

jquery插件jqzoom放大镜插件特效代码分享

原文:jquery插件jqzoom放大镜插件特效代码分享 源代码下载地址:http://www.zuidaima.com/share/1550463469554688.htm 放大镜插件效果是当前电子商务系统的一个不可缺的部分,值得学习哦 代码截图:

百度图表数据插件echarts的初试

身为一个小前端,当得知需要在页面根据后台数据绘制统计数据的图表时,一筹莫展,幸好遇见了百度的ECharts插件,这款插件容易入手: 一下为初试: prepare.js//稍微封装,易于复用 /* *function getJson() *为获取后台的数据json *json.data为报表数据对应横轴的值 *json.name为报表横坐标的名称 */ function getJson(){ var jsondata = {}; jsondata.legendName = []; //图表的表面

jQuery插件库代码分享 - 进阶者系列 - 学习者系列文章

这些天将原来在网上找的jQuery插件进行了下整理,特此将代码分享出来给大家. 见下图结构. 对目录结构进行了分类.这里是插件列表. 这里总共收集了20来个插件.还有下面未进行划分的. 下面是DEMO使用示例. 下面是上次的一个示例. 编写Javascript类库(jQuery版) - 进阶者系列 - 学习者系列文章 主要收集了这些个大概能使用到的插件. 下面提供下载地址: http://files.cnblogs.com/lzhdim/JavascriptSLN.rar Ps.今天是周六,天气

17款jQuery在线QQ客服代码分享

17款jQuery在线QQ客服代码分享给大家咯!!拿走,不谢,我叫雷锋~~ jQuery侧边栏点击展开收缩在线QQ客服代码 jQuery网页右侧固定层显示隐藏在线qq客服代码 jQuery点击按钮遮罩弹出在线QQ客服代码 jQuery带留言在线qq客服代码 绿色的jquery qq在线客服网页右侧固定层qq客服隐藏显示代码 蓝色的jquery固定div悬浮在线客服代码 jquery固定层网页侧边栏在线qq客服代码 jquery浮动在左侧的QQ客服代码 带有弹性可伸缩的在线客服代码 jquery右

WeMall微信商城源码插件大转盘代码详情

WeMall微信商城源码插件大转盘代码是用于商业推广的比较有效的方式,分享了部分比较重要的代码,供技术员学习参考 代码详情地址:http://addon.wemallshop.com/Product/addonList/menu_id/1 或 www.wemallshop.com AdminController.class Php代码   <?php // +---------------------------------------------------------------------

.net之工作流工程展示及代码分享(一)工作流表单

Workflow表单的作用是能够在客户端进行表单设计,然后在流程中动态开放哪些输入框可以供用户填写. 在这里我扩展了一个常用的WebEditor工具——KindEditor,能够插入自定义的html符号,如下图: Form类如下: 1 public delegate string SetAutoCompleteValue(string autoCompleteType); 2 3 [Serializable] 4 public class Form 5 { 6 [XmlAttribute] 7

MySQL对数据表进行分组查询(GROUP BY)

MySQL对数据表进行分组查询(GROUP BY) GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组.字段中值相等的为一组.基本的语法格式如下: GROUP BY 属性名 [HAVING 条件表达式] [WITH ROLLUP] 属性名:是指按照该字段的值进行分组. HAVING 条件表达式:用来限制分组后的显示,符合条件表达式的结果将被显示. WITH ROLLUP:将会在所有记录的最后加上一条记录.加上的这一条记录是上面所有记录的总和. GROUP BY关键字可以和GROU

jQuery实现的手机发送验证码倒计时效果代码分享

这是一款基于jquery实现的手机发送验证码倒计时效果代码,可实现实时显示秒数倒计时的功能,还可实现对手机号码格式验证的功能,是一款常用的网站注册发送手机验证码特效代码. 效果描述:注册一个网站,当需要发送验证码到手机上的时候,我们经常碰到这样的效果:首先检测手机是否符合1开头,11位数字的格式:若不符合,则提示错误信息并返回false:否则提交给后台,后台确定接收后返回一个值,发送按钮变为灰色并倒计时. 运行效果: 年利率高达14.4% 上海投融理财,20万起投,年化收益14.4% 房产抵押,