项目中需要对数据进行图形展示,例如展示柱状图、饼状图等。这类的前端展示脚本很多,常见的是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. linux-网络数据包抓取-tcpdump

    用法格式: tcpdump [-i 网卡]  [选项]  '表达式' 选项说明如下: -i:interface 监听的网卡. -nn:表示以ip和port的方式显示来源主机和目的主机,而不是用主机名和 ...

  2. 最近发现的.net core中的一些bugs

    1.使用.net core的过程中发现TypeInfo.GetCustomAttributes()只能写在主线程中,否则如果该自定义特性存在于nuget中就会报错,貌似nuget中的dll仅在主线程使 ...

  3. x86_64的内存映射

    对于x86_64来说,逻辑地址由16位选择子和64位偏移量组成(而32位时,逻辑地址由16位段选择符和32位偏移量组成),段寄存器仅仅存放选择子.CPU的分段单元(SU)执行以下操作:[1] 先检查选 ...

  4. java中map集合的迭代

    import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class TestMap { pu ...

  5. MySQL Sniffer

    MySQL Sniffer 是360开源的一个基于 MySQL 协议的抓包工具, 能实时抓取客户端端请求,并格式化输出操作语句,操作十分简单.对于问题的定位,操作的审核是个不错的利器. Github地 ...

  6. apicloud中dialog使用方法

    var dialog = new auiDialog(); function openDialog(type){ switch (type) { case "text": dial ...

  7. leetcode HouseRobber Dp Code

    #include <malloc.h> int MAX(int x,int y){ return x>y?x:y;} int rob(int* nums, int numsSize) ...

  8. 1664: [Usaco2006 Open]County Fair Events 参加节日庆祝

    1664: [Usaco2006 Open]County Fair Events 参加节日庆祝 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 255  S ...

  9. 1692: [Usaco2007 Dec]队列变换(BZOJ1640强化版)

    1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 682  Solved: 280[Submit][Sta ...

  10. 更加 "深入" 理解多态

    1.1 public abstract class Birds{ //什么样的方法是抽象方法 public abstract void Fly(); } public class YZ:Birds{ ...