项目中需要对数据进行图形展示,例如展示柱状图、饼状图等。这类的前端展示脚本很多,常见的是HighCharts和Echarts。HighCharts是基于svg技术的,而echarts基于Echarts,两者技术基础完全不一样,各有特点。而后者是可以在浏览器实现3D图形的。在各种图形展示上基本是差不多,都能满足项目需要。但是HighCharts是收费的,而Echarts是开源免费的,如果用于实际的项目还是使用Echarts。

  使用这类前端脚本,每种图形都需要写很多重复的脚本,复用性低,其实可以将相同的代码进行封装,方便重复使用。之前使用HighCharts时,封装了一个,使用C#和数据库,只需要在数据库中配置Sql语句即可,不需要修改大量的代码。但是使用不方便,需要配置多个表。

  本文中只封装了前端,调用只需要传入标题、数据等参数即可。主要代码如下:

 var MyECharts = {
     //格式化数据
     ChartDataFormate: {
         FormateNOGroupData: function (data) {
             var categories = [];
             var datas = [];
             for (var i = 0; i < data.length; i++) {
                 categories.push(data[i].name || '');
                 temp_series = { value: data[i].value || 0, name: data[i].name };
                 datas.push(temp_series);
             }
             return { category: categories, data: datas };
         },
         //处理分组数据,数据格式:group:XXX,name:XXX,value:XXX用于折线图、柱形图(分组,堆积)
         //参数:数据、展示类型
         FormatGroupData: function (data, type) {
             var groups = new Array();
             var names = new Array();
             var series = new Array();
             for (var i = 0; i < data.length; i++) {
                 if (!groups.contains(data[i].group)) {
                     groups.push(data[i].group);
                 }
                 if (!names.contains(data[i].name)) {
                     names.push(data[i].name);
                 }
             }
             for (var i = 0; i < groups.length; i++) {
                 var temp_series = {};
                 var temp_data = new Array();
                 for (var j = 0; j < data.length; j++) {
                     for (var k = 0; k < names.length; k++)
                         if (groups[i] == data[j].group && data[j].name == names[k])
                             temp_data.push(data[j].value);
                     }
                     temp_series = { name: groups[i], type: type, data: temp_data };
                     series.push(temp_series);
                 }
                 return { category: names, series: series };
             }
         },
     //生成图形
     ChartOptionTemplates: {
         //柱状图
         Bar: function (title, subtext, data) {
             var datas = MyECharts.ChartDataFormate.FormatGroupData(data, 'bar');
             var option = {
                 title: {
                     text: title || '',
                     subtext: subtext || '',
                     x: 'center'
                 },
                 tooltip: {
                     show: true
                 },
                 xAxis: [
                 {
                     type: 'category',
                     data: datas.category
                 }
                 ],
                 yAxis: [
                 {
                     type: 'value'
                 }
                 ],
                 series: datas.series
             };
             return option;
         },
         //折线图
         Line: function (title, subtext, data) {
             var datas = MyECharts.ChartDataFormate.FormatGroupData(data, 'line');
             var option = {
                 title: {
                     text: title || '',
                     subtext: subtext || '',
                     x: 'center'
                 },
                 tooltip: {
                     show: true
                 },
                 xAxis: [
                 {
                     type: 'category',
                     data: datas.category
                 }
                 ],
                 yAxis: [
                 {
                     type: 'value'
                 }
                 ],
                 series: datas.series
             };
             return option;
         },
         //饼图
         Pie: function (title, subtext, data) {
             var datas = MyECharts.ChartDataFormate.FormateNOGroupData(data);
             var option = {
                 title: {
                     text: title || '',
                     subtext: subtext || '',
                     x: 'center'
                 },
                 tooltip: {
                     show: true,
                     trigger: 'item',
                     formatter: "{a} <br/>{b} : {c} ({d}%)"
                 },
                 legend: {
                     orient: 'vertical',
                     left: 'left',
                     data: datas.category
                 },
                 series: [
                 {
                     name: title,
                     type: 'pie',
                     radius: '55%',
                     center: ['50%', '60%'],
                     data: datas.data,
                     itemStyle: {
                         emphasis: {
                             shadowBlur: 10,
                             shadowOffsetX: 0,
                             shadowColor: 'rgba(0, 0, 0, 0.5)'
                         }
                     }
                 }
                 ]
             };
             return option;
         },
         //散点图
         Scatter: function (title, subtext, data) {
             var markLineOpt = {
                 animation: false,
                 label: {
                     normal: {
                         formatter: 'y = 0.5 * x + 3',
                         textStyle: {
                             align: 'right'
                         }
                     }
                 },
                 lineStyle: {
                     normal: {
                         type: 'solid'
                     }
                 },
                 tooltip: {
                     formatter: 'y = 0.5 * x + 3'
                 },
                 data: [[{
                     coord: [0, 3],
                     symbol: 'none'
                 }, {
                     coord: [20, 13],
                     symbol: 'none'
                 }]]
             };

             var option = {
                 title: {
                     text: 'Anscombe\'s quartet',
                     x: 'center',
                     y: 0
                 },
                 grid: [
                 {x: '7%', y: '7%', width: '38%', height: '38%'},
                 {x2: '7%', y: '7%', width: '38%', height: '38%'},
                 {x: '7%', y2: '7%', width: '38%', height: '38%'},
                 {x2: '7%', y2: '7%', width: '38%', height: '38%'}
                 ],
                 tooltip: {
                     formatter: 'Group {a}: ({c})'
                 },
                 xAxis: [
                     {gridIndex: 0, min: 0, max: 20},
                     {gridIndex: 1, min: 0, max: 20},
                     {gridIndex: 2, min: 0, max: 20},
                     {gridIndex: 3, min: 0, max: 20}
                 ],
                 yAxis: [
                     {gridIndex: 0, min: 0, max: 15},
                     {gridIndex: 1, min: 0, max: 15},
                     {gridIndex: 2, min: 0, max: 15},
                     {gridIndex: 3, min: 0, max: 15}
                 ],
                 series: [
                 {
                     name: 'I',
                     type: 'scatter',
                     xAxisIndex: 0,
                     yAxisIndex: 0,
                     data: data[0],
                     markLine: markLineOpt
                 },
                 {
                     name: 'II',
                     type: 'scatter',
                     xAxisIndex: 1,
                     yAxisIndex: 1,
                     data: data[1],
                     markLine: markLineOpt
                 },
                 {
                     name: 'III',
                     type: 'scatter',
                     xAxisIndex: 2,
                     yAxisIndex: 2,
                     data: data[2],
                     markLine: markLineOpt
                 },
                 {
                     name: 'IV',
                     type: 'scatter',
                     xAxisIndex: 3,
                     yAxisIndex: 3,
                     data: data[3],
                     markLine: markLineOpt
                 }
                 ]
             };
             return option;
         }
     },
     //图形展示
     //参数:图形option、图形显示区域id
     RenderChart: function (option, containerId) {
         var container = eval("document.getElementById('" + containerId + "');");//获取图形显示区域
         var myChart = echarts.init(container);
         myChart.setOption(option);// 为echarts对象加载数据
     }
 };

这个实现了对ECharts的封装,在前端调用代码如下:

1、先定义一块区域用于显示图形

     <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
     <div id="container1" style="height: 400px"></div>

2、引入需要的脚本,一个是原生的ECharts脚本库,一个是自己封装的。

     <script src="MyECharts/resource/ECharts/echarts.js"></script>
     <script src="MyECharts/resource/MyECharts.js"></script>

3、使用封装的ECharts代码如下:

  先定义需要的数据,在传入生成图形需要的参数,最后展现图形。

     <script type="text/javascript">
         var data1 = [
             { group: 'Beijing', name: '1月', value: 10 },
             { group: 'Beijing', name: '2月', value: 15 },
             { group: 'Beijing', name: '3月', value: 12 },
             { group: 'Beijing', name: '4月', value: 14 },
             { group: 'Tokyo', name: '1月', value: 12 },
             { group: 'Tokyo', name: '2月', value: 15 },
             { group: 'Tokyo', name: '3月', value: 2 },
             { group: 'Tokyo', name: '4月', value: 14 }];

         var opt1 = MyECharts.ChartOptionTemplates.Bar('各个城市气温趋势', '°C', data1);
         MyECharts.RenderChart(opt1, 'container1');
     </script>

整个项目代码在github上:https://github.com/yangtzeyufei/MyEcharts

欢迎大家共同参与。

其他:Echart官网http://echarts.baidu.com/

封装Echarts的更多相关文章

  1. react-native中使用Echarts,自己使用WebView封装Echarts经验

    1.工作中遇到的问题 我们在使用react-native肯定遇到过各种奇葩的问题,比如引入Echarts时候莫名报错,但是Echarts官网明显告诉我们可以懒加载的,这是因为基本上js大部分原生的组件 ...

  2. vue学习【一】vue引用封装echarts并展示多个echarts图表

    大家好,我是一叶,经过一段时间对vue的学习,我打算把vue做一个系列,把踩过的坑和大家分享一下. 现在开始第一章:vue引用并封装echarts 在文章开始前,我先舔波echarts(真香).阿里的 ...

  3. 在vue项目中封装echarts的正确姿势

    为什么需要封装echarts 每个开发者在制作图表时都需要从头到尾书写一遍完整的option配置,十分冗余 在同一个项目中,各类图表设计十分相似,甚至是相同,没必要一直做重复工作 可能有一些开发者忘记 ...

  4. 使用angular封装echarts

    Echarts是一个开源的图表组件,图表比较丰富,工作中需要用到它来搭建一个数据展示系统.但是系统原有的框架是基于angular的,而echarts是基于原生js的,如果直接使用的话就丢失了angul ...

  5. 【小程序】---- 封装Echarts公共组件,遍历图表实现多个饼图

    一.问题描述: 在小程序的项目中,封装公共的饼图组件,并在需要的页面引入使用.要求一个页面中有多个饼图,动态渲染不同的数据. 二.效果实现: 1. 查看——小程序使用Echarts的方式 2. 封装饼 ...

  6. angularf封装echarts

    前言:angular中快速使用echarts 在html使用ehart很简单,你只需要引入文件和按照官方例子按照对应参数配置和数据填充就Ok了,那么在angular中怎么使用eharts(可以使用ec ...

  7. Vue + Element-ui实现后台管理系统(4)---封装一个ECharts组件的一点思路

    封装一个ECharts组件的一点思路 有关后台管理系统之前写过三遍博客,看这篇之前最好先看下这三篇博客.另外这里只展示关键部分代码,项目代码放在github上: mall-manage-system ...

  8. NodeJS + React + Webpack + Echarts

    最近画了个简单的前端图,使用百度的echarts,基于原来项目的NodeJS+React+Webpack框架.在此记录一下: 1.  在react里封装echarts组件,并调用后端API. (参考的 ...

  9. 对echarts的简单封装

    看了echarts的官网介绍:http://echarts.baidu.com/doc/example.html 看了网上人使用js对echarts的封装:http://blog.csdn.net/x ...

随机推荐

  1. c++针对数据库,文件的操作总结(原始)

    1.将文件保存到sqlserver数据库的相关操作: Update t1 .txt’, SINGLE_BLOB ) Select convert( varchar(), data ) 注:fileTy ...

  2. MySQL账户管理

    body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10 ...

  3. 学习笔记——Java内部类练习题

    1.尝试在方法中编写一个匿名内部类. package com.lzw; public class AnonymityInnerClass { } class OuterClass4{ public O ...

  4. 【CNMP系列】CNMP之路,系统起步。

    简单的来理解,我所说的CNMP,不是CNM+P,而是CentOs+Nginx+MySql+PHP,也可以单纯的理解为LNMP,但是系统是我们自己选的,虽说是Linux的一个分支,但我就喜欢CentOs ...

  5. C#语言基础——定义变量、变量赋值、输入输出

    第一部分 了解c# 一.C#的定义及其特点 C#是微软公司在2000年7月发布的一种全新且简单.安全.面向对象的程序设计语言,是专门为.net的应用而开发的语言.它吸收了c++.Visual basi ...

  6. Java(基础)的类与变量

    Java的类与成员变量 在我们学习编程语言中,需要灵活自用,那么怎么来灵活的将所有的函数属性来调用来实现完整的工程呢? 所以我们需要认识到类和变量的定义 1.类是什么? 类是抽象的概念,而对象就是类的 ...

  7. BigInteger和BigDecimal的练习

    前言: BigInteger用于处理大数据的计算,它继承自java.math.BigInteger.用法相对来说比较简单,掌握几个基本运算即可. 初始化: BigInteger sum=new Big ...

  8. 百度地图API-覆盖物

    这两天一直在研究百度地图开放平台的各种好玩的东西,闲暇之余自己动手体验了一番,果然是妙趣横生,而且还可以自定义理想中的地图,不得不说,百度地图的开放平台为我们的应用提供了很多的便利,之前我们已经学习了 ...

  9. ubuntu中文输入问题

    因为硬盘版的一些缺陷,我狠心的把windows8覆盖为ubuntu 13.10,用u盘安装,除了分区稀里糊涂的还不知到怎么分,其他问题就是汉字的输入问题了,因为之前选了english-US 后来就没有 ...

  10. 你可记得曾经的-------- C#面向对象的“基础”

    1.C#中构造函数定义的理解:     ①构造函数名与所在的类名相同     ②构造函数可以重载     ③构造函数可以带参数     ④构造函数没有返回值,且不允许写出void,可以有参也可以无参 ...