一、简介
  EChart是百度开发的js图表软件,用它我们可以很方便地以图形化的方式对数据进行分析统计。该种方式js在页面动态拼接json数据,再进行渲染。这种方法的优点是,灵活,可以随时进行修改。缺点是js代码多,难以维护。此时我们可以Java EChart插件,在后端构造好option数据,最后在页面直接使用构造好的option数据,渲染效果。下载地址为:http://git.oschina.net/free/ECharts
  EChart提供链式的调用方法,使用也比较方便。它依赖Google的gson包,gson下载地址为:https://github.com/google/gson 。gson与EChart加入项目依赖。
  maven依赖如下:

<dependency>
<groupId>com.github.abel533</groupId>
<artifactId>ECharts</artifactId>
<version>2.2.7</version>
</dependency> <dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.5</version>
</dependency>

二、示例
  1、柱状图

     /**
* 柱状图
*
* @param isHorizontal
* 是否水平放置
*/
public void testBar(boolean isHorizontal) {
String[] citis = { "广州", "深圳", "珠海", "汕头", "韶关", "佛山" };
int[] datas = { 6030, 7800, 5200, 3444, 2666, 5708 };
String[] colors = { "rgb(2,111,230)", "rgb(186,73,46)", "rgb(78,154,97)", "rgb(2,111,230)", "rgb(186,73,46)", "rgb(78,154,97)" };
String title = "地市数据"; GsonOption option = new GsonOption(); option.title(title); // 标题
// 工具栏
option.toolbox().show(true).feature(Tool.mark, // 辅助线
Tool.dataView, // 数据视图
new MagicType(Magic.line, Magic.bar),// 线图、柱状图切换
Tool.restore,// 还原
Tool.saveAsImage);// 保存为图片 option.tooltip().show(true).formatter("{a} <br/>{b} : {c}");//显示工具提示,设置提示格式 option.legend(title);// 图例 Bar bar = new Bar(title);// 图类别(柱状图)
CategoryAxis category = new CategoryAxis();// 轴分类
category.data(citis);// 轴数据类别
// 循环数据
for (int i = 0; i < citis.length; i++) {
int data = datas[i];
String color = colors[i];
// 类目对应的柱状图
Map<String, Object> map = new HashMap<String, Object>(2);
map.put("value", data);
map.put("itemStyle", new ItemStyle().normal(new Normal().color(color)));
bar.data(map);
} if (isHorizontal) {// 横轴为类别、纵轴为值
option.xAxis(category);// x轴
option.yAxis(new ValueAxis());// y轴
} else {// 横轴为值、纵轴为类别
option.xAxis(new ValueAxis());// x轴
option.yAxis(category);// y轴
} option.series(bar);
}

  生成的json数据如下:

 {
"title": {
"text": "地市数据"
},
"toolbox": {
"feature": {
"mark": {
"show": true,
"title": {
"mark": "辅助线开关",
"markClear": "清空辅助线",
"markUndo": "删除辅助线"
},
"lineStyle": {
"color": "#1e90ff",
"type": "dashed",
"width": 2
}
},
"dataView": {
"show": true,
"title": "数据视图",
"readOnly": false,
"lang": ["数据视图", "关闭", "刷新"]
},
"magicType": {
"show": true,
"title": {
"line": "折线图切换",
"stack": "堆积",
"bar": "柱形图切换",
"tiled": "平铺"
},
"type": ["line", "bar"]
},
"restore": {
"show": true,
"title": "还原"
},
"saveAsImage": {
"show": true,
"title": "保存为图片",
"type": "png",
"lang": ["点击保存"]
}
},
"show": true
},
"tooltip": {
"formatter": "{a} <br/>{b} : {c}",
"show": true
},
"legend": {
"data": ["地市数据"]
},
"xAxis": [{
"type": "category",
"data": ["广州", "深圳", "珠海", "汕头", "韶关", "佛山"]
}],
"yAxis": [{
"type": "value"
}],
"series": [{
"name": "地市数据",
"type": "bar",
"data": [{
"value": 6030,
"itemStyle": {
"normal": {
"color": "rgb(2,111,230)"
}
}
}, {
"value": 7800,
"itemStyle": {
"normal": {
"color": "rgb(186,73,46)"
}
}
}, {
"value": 5200,
"itemStyle": {
"normal": {
"color": "rgb(78,154,97)"
}
}
}, {
"value": 3444,
"itemStyle": {
"normal": {
"color": "rgb(2,111,230)"
}
}
}, {
"value": 2666,
"itemStyle": {
"normal": {
"color": "rgb(186,73,46)"
}
}
}, {
"value": 5708,
"itemStyle": {
"normal": {
"color": "rgb(78,154,97)"
}
}
}]
}]
}

  生成的图如下:

  

  2、折线图

 /**
* 折线图
*
* @param isHorizontal
* 是否水平放置
*/
public void testLine(boolean isHorizontal) {
String[] types = { "邮件营销", "联盟广告", "视频广告" };
int[][] datas = { { 120, 132, 101, 134, 90, 230, 210 }, { 220, 182, 191, 234, 290, 330, 310 }, { 150, 232, 201, 154, 190, 330, 410 } };
String title = "广告数据"; GsonOption option = new GsonOption(); option.title().text(title).subtext("虚构").x("left");// 大标题、小标题、位置 // 提示工具
option.tooltip().trigger(Trigger.axis);// 在轴上触发提示数据
// 工具栏
option.toolbox().show(true).feature(Tool.saveAsImage);// 显示保存为图片 option.legend(types);// 图例 CategoryAxis category = new CategoryAxis();// 轴分类
category.data("周一", "周二", "周三", "周四", "周五", "周六", "周日");
category.boundaryGap(false);// 起始和结束两端空白策略 // 循环数据
for (int i = 0; i < types.length; i++) {
Line line = new Line();// 三条线,三个对象
String type = types[i];
line.name(type).stack("总量");
for (int j = 0; j < datas[i].length; j++)
line.data(datas[i][j]);
option.series(line);
} if (isHorizontal) {// 横轴为类别、纵轴为值
option.xAxis(category);// x轴
option.yAxis(new ValueAxis());// y轴
} else {// 横轴为值、纵轴为类别
option.xAxis(new ValueAxis());// x轴
option.yAxis(category);// y轴
} }

  生成的json数据如下:

 {
"title": {
"text": "广告数据",
"subtext": "虚构",
"x": "left"
},
"toolbox": {
"feature": {
"saveAsImage": {
"show": true,
"title": "保存为图片",
"type": "png",
"lang": ["点击保存"]
}
},
"show": true
},
"tooltip": {
"trigger": "axis"
},
"legend": {
"data": ["邮件营销", "联盟广告", "视频广告"]
},
"xAxis": [{
"boundaryGap": false,
"type": "category",
"data": ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
}],
"yAxis": [{
"type": "value"
}],
"series": [{
"name": "邮件营销",
"type": "line",
"stack": "总量",
"data": [120, 132, 101, 134, 90, 230, 210]
}, {
"name": "联盟广告",
"type": "line",
"stack": "总量",
"data": [220, 182, 191, 234, 290, 330, 310]
}, {
"name": "视频广告",
"type": "line",
"stack": "总量",
"data": [150, 232, 201, 154, 190, 330, 410]
}]
}

  生成的图如下:

    

  3、饼图

 /**
* 饼图
*/
public void testPie() {
String[] types = { "邮件营销", "联盟广告", "视频广告" };
int[] datas = { 120, 132, 101 };
String title = "广告数据";
GsonOption option = new GsonOption(); option.title().text(title).subtext("虚构").x("center");// 大标题、小标题、标题位置 // 提示工具 鼠标在每一个数据项上,触发显示提示数据
option.tooltip().trigger(Trigger.item).formatter("{a} <br/>{b} : {c} ({d}%)"); // 工具栏
option.toolbox().show(true).feature(new Mark().show(true),// 辅助线
new DataView().show(true).readOnly(false),// 数据视图
new MagicType().show(true).type(new Magic[] { Magic.pie, Magic.funnel }), //饼图、漏斗图切换
new Option().series(new Funnel().x("25%").width("50%").funnelAlign(X.left).max(1548)),// 漏斗图设置
Tool.restore,// 还原
Tool.saveAsImage);// 保存为图片 option.legend().orient(Orient.horizontal).x("left").data(types);// 图例及位置 option.calculable(true);// 拖动进行计算 Pie pie = new Pie(); // 标题、半径、位置
pie.name(title).radius("55%").center("50%", "60%"); // 循环数据
for (int i = 0; i < types.length; i++) {
Map<String, Object> map = new HashMap<String, Object>(2);
map.put("value", datas[i]);
map.put("name", types[i]);
pie.data(map);
} option.series(pie);
}

  生成的json数据如下:

 {
"calculable": true,
"title": {
"text": "广告数据",
"subtext": "虚构",
"x": "center"
},
"toolbox": {
"feature": {
"mark": {
"show": true,
"title": {
"mark": "辅助线开关",
"markClear": "清空辅助线",
"markUndo": "删除辅助线"
},
"lineStyle": {
"color": "#1e90ff",
"type": "dashed",
"width": 2
}
},
"dataView": {
"show": true,
"title": "数据视图",
"readOnly": false,
"lang": ["数据视图", "关闭", "刷新"]
},
"magicType": {
"show": true,
"title": {
"line": "折线图切换",
"stack": "堆积",
"bar": "柱形图切换",
"tiled": "平铺"
},
"type": ["pie", "funnel"]
},
"restore": {
"show": true,
"title": "还原"
},
"saveAsImage": {
"show": true,
"title": "保存为图片",
"type": "png",
"lang": ["点击保存"]
}
},
"show": true
},
"tooltip": {
"trigger": "item",
"formatter": "{a} <br/>{b} : {c} ({d}%)"
},
"legend": {
"orient": "horizontal",
"data": ["邮件营销", "联盟广告", "视频广告"],
"x": "left"
},
"series": [{
"center": ["50%", "60%"],
"radius": "55%",
"name": "广告数据",
"type": "pie",
"data": [{
"value": 120,
"name": "邮件营销"
}, {
"value": 132,
"name": "联盟广告"
}, {
"value": 101,
"name": "视频广告"
}]
}]
}

  生成的图如下:

    

java 版本EChart使用的更多相关文章

  1. Java版本:识别Json字符串并分隔成Map集合

    前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...

  2. 你的程序支持复杂的时间调度嘛?如约而来的 java 版本

    你的程序支持复杂的时间调度嘛? 这篇文章介绍了时间适配器的c#版本,是给客户端用的,服务器自然也要有一套对应的做法,java版本的 [年][月][日][星期][时间] [*][*][*][*][*] ...

  3. 崔用志-微信开发-java版本

    崔用志-微信开发-java版本 今天看到一些关于微信开发的知识蛮好的博客,分享给大家,希望对大家有帮助. 微信开发准备(一)--Maven仓库管理新建WEB项目 微信开发准备(二)--springmv ...

  4. java版本区别

    java版本区别 点我,点我,Eclipse几个版本号的区别(part1) 点我,点我,Eclipse几个版本号的区别(part2) 点我,点我,Eclipse几个版本号的区别(part3)

  5. javac。java版本切换

    如果安装有多个Java版本时(有时候有些软件自行安装),怎样方便的进行切换呢.除了常见的设置环境变量外,今天学到了一种新的切换方法: update-alternatives --config java ...

  6. JGibbLDA:java版本的LDA(Latent Dirichlet Allocation)实现、修改及使用

    转载自:http://blog.csdn.net/memray/article/details/16810763   一.概述 JGibbLDA是一个java版本的LDA(Latent Dirichl ...

  7. Mac下修改默认的Java版本

    今天在安装Elicpse IDE的时候,发现提示安装的Java版本不支持,于是在官方去下载了Jre最新版本并安装,在安装完过后再次打开Elicpse发现提示还是不正确,如果用Google查询到一些资料 ...

  8. Mac 配置java版本 ---- MySql数据库权限设置 --- openfire

    java -version 显示java 版本 sudo su - root 切换身份 cd /usr/local/openfire 进入openfire目录 cd bin/ 进入 bin vim o ...

  9. 升级mac的java版本

    在OS X EI Capitan下, java版本太低,从oracle官网下载的dmg文件升级一直有问题, 我发现mac下的java环境有三处 #这应该是系统自带java环境,默认/usr/bin/j ...

随机推荐

  1. 1.羽翼sqlmap学习笔记之Access注入

    使用sqlmap工具进行Acces注入:1.判断一个url是否存在注入点,根据返回数据判断数据库类型: .sqlmap.py -u "http://abcd****efg.asp?id=7& ...

  2. PHP实现实现数字补零格式化

    在接支付SDK的时候,第三方回调处理时需要IP,并且IP的需求是:去掉点号,补零到每地址段3位, 如:192168000001 先看看我的实现: <?php $IP = explode ( '. ...

  3. 【Python实战】Scrapy豌豆荚应用市场爬虫

    对于给定的大量APP,如何爬取与之对应的(应用市场)分类.描述的信息?且看下面分解. 1. 页面分析 当我们在豌豆荚首页搜索框输入微信后,会跳转到搜索结果的页面,其url为http://www.wan ...

  4. 设计模式(Design Pattern)系列之.NET专题

    最近,不是特别忙,重新翻了下设计模式,特地在此记录一下.会不定期更新本系列专题文章. 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. 使用 ...

  5. C#基础-FileStream实现多线程断点续传

    一.前言 网上有许多的多线程断点续传操作,但总是写的很云里雾里,或者写的比较坑长.由于这几个月要负责公司的在线升级项目,所以正好顺便写了一下 代码如下: using System; using Sys ...

  6. 【转】asp.net(c#)使用HttpWebRequest附加携带请求参数以post方式模拟上传大文件(以图片为例)到Web服务器端

    原文地址:http://docode.top/Article/Detail/10002 目录: 1.Http协议上传文件(以图片为例)请求报文体内容格式 2.完整版HttpWebRequest模拟上传 ...

  7. 【T-SQL】分布抽取部分数据

    好吧,我确实不知道该怎么起这个标题,整了一个“分布”,感觉还有点高档,其实没啥技术含量,看完你就知道了.情况是这样,刚刚接到一个临时任务,需要让几个营业点的销售数据[变]少一点,就是在ERP的相关报表 ...

  8. bootstrap-简单实用的垂直手风琴滑动菜单列表特效

    前端: <html lang="zh"> <head> <meta charset="UTF-8"> <meta ht ...

  9. appach2.4 + php7 +mysql5.7.14 配置

    步骤1.首先打开Apache2.2\conf里面的httpd.conf文件.在里面找到: ServerRoot ,改成Appache所在目录  步骤二 在LoadModule 后面添加支持php7的扩 ...

  10. WebAPI生成可导入到PostMan的数据

    一.前言 现在使用WebAPI来作为实现企业服务化的需求非常常见,不可否认它也是很便于使用的,基于注释可以生成对应的帮助文档(Microsoft.AspNet.WebApi.HelpPage),但是比 ...