这是一个针对 ECharts 2.0 版本的Java类库,实现了所有ECharts中的Json结构对应的Java对象,并且可以很方便的创建Option
本项目是一个供Java开发使用的ECharts的开发包,主要目的是方便在Java中构造ECharts中可能用到的全部数据结构,如完整的结构 Option。Option中的数据Series,包含Bar-柱状图,Line-折线图,Pie-饼图,Chord-和弦图等,支持ECharts中的 所有图表。支持所有的Style类,如AreaStyle,ChordStyle,ItemStyle,LineStyle,LinkStyle等等。支 持多种Data数据类型,一个通用的Data数据,以及PieData,MapData,ScatterData,KData等针对性的数据结构。
你可以使用本项目直接构造一个Option对象,转换为JSON后直接用js设置myChart.setOption(option),或者你也可以在前段构造基本的Option对象,然后使用本项目来构造其中需要的任意某部分的数据,如使用Series支持的图表类型创建Series数据。
gitosc: http://git.oschina.net/free/ECharts
github: https://github.com/abel533/ECharts
Line - 折线(面积)图
Bar - 柱状(条形)图
Scatter - 散点(气泡)图
K - K线图
Pie - 饼(圆环)图
Radar - 雷达(面积)图
Chord - 和弦图
Force - 力导向布局图
Map - 地图
Gauge - 仪表盘
Funnel - 漏斗图
Island - 孤岛图(官方未提供,这里只有数据Island对象)
EventRiver - 事件河流图
Venn - 韦恩图
Tree - 树图
Treemap - 矩形树图
WordCloud - 词云
Heatmap - 热力图
Axis - 坐标轴
Grid - 网格
Title - 标题
Tooltip - 提示
Legend - 图例
DataZoom - 数据区域缩放
DataRange - 值域漫游
Toolbox - 工具箱
Timeline - 时间线
Option正式代码中使用,不需要任何依赖。
GsonOption正式代码中可以使用,需要引入Gson包,使用toString()方法可以转换为JSON结构的数据(支持function,详情看下面的function说明)。
EnhancedOption测试专用,主要方便在浏览器中直接查看效果。
由于JSON标准中不包含function类型,因而大多数的JSON库都不直接支持这种类型,处理这种类型最简单的方式就是转换为JSON字符串时,对字符串进行处理。
虽然像jackson json和fastjson通过注解或者自定义的实现序列化接口可以实现,毕竟和JSON库的结合太密切了,而且使用起来也很麻烦,不如直接处理字符串,或者在js中处理。
本项目中提供了GSON实现的GsonOption,就是重写了toString()方法,改为输出JSON结构的字符串,并且支持以下两种function形式:
{ formatter:function(value){ return value.substring(0,8); }}//和{ formatter:(function(){ return 'Temperature : <br/>{b}km : {c}°C'; })()}
当然这种形式在Java中书写的时候有着严格的要求:
option.tooltip().trigger(Trigger.axis).formatter("function(value){return value.substring(0,8);}");option.tooltip().trigger(Trigger.axis).formatter("(function(){return 'Temperature : <br/>{b}km : {c}°C';})()");
先看第一种,这里的"function中,双引号和function必须连着,中间不能存在空格,否则不会识别。然后是结尾的}",这里也必须连着不能有空格,在首尾这两段代码之间不能出现}",否则会判断出错。如果在{}中的代码有字符串,请使用单引号',双引号出现在单引号内时使用\"即可。除此之外没有别的限制。
再看第二种,这里的"(function中,双引号、括号和function必须连着,中间不能存在空格,否则不会识别。然后是结尾的})()",这里也必须连着不能有空格,在首尾这两段代码之间不能出现})()",否则会判断出错。如果在{}中的代码有字符串,请使用单引号',双引号出现在单引号内时使用\"即可。除此之外没有别的限制。
上述对function的处理很简单,不限制在formatter使用,所有值都能这么写,你可以参考写出自己的Option
对应的ECharts例子地址: http://echarts.baidu.com/doc/example/line5.html
测试代码地址:LineTest5.java
@Testpublic void test() { //地址:http://echarts.baidu.com/doc/example/line5.html EnhancedOption option = new EnhancedOption(); option.legend("高度(km)与气温(°C)变化关系"); option.toolbox().show(true).feature(Tool.mark, Tool.dataView, new MagicType(Magic.line, Magic.bar), Tool.restore, Tool.saveAsImage); option.calculable(true); option.tooltip().trigger(Trigger.axis).formatter("Temperature : <br/>{b}km : {c}°C"); ValueAxis valueAxis = new ValueAxis(); valueAxis.axisLabel().formatter("{value} °C"); option.xAxis(valueAxis); CategoryAxis categoryAxis = new CategoryAxis(); categoryAxis.axisLine().onZero(false); categoryAxis.axisLabel().formatter("{value} km"); categoryAxis.boundaryGap(false); categoryAxis.data(0, 10, 20, 30, 40, 50, 60, 70, 80); option.yAxis(categoryAxis); Line line = new Line(); line.smooth(true).name("高度(km)与气温(°C)变化关系").data(15, -50, -56.5, -46.5, -22.1, -2.5, -27.7, -55.7, -76.5).itemStyle().normal().lineStyle().shadowColor("rgba(0,0,0,0.4)"); option.series(line); option.exportToHtml("line5.html"); option.view();}
代码生成的json结果:
{ "calculable": true, "toolbox": { "show": true, "feature": { "restore": { "show": true, "title": "还原" }, "magicType": { "show": true, "title": { "line": "折线图切换", "stack": "堆积", "bar": "柱形图切换", "tiled": "平铺" }, "type": ["line", "bar"] }, "dataView": { "show": true, "title": "数据视图", "readOnly": false, "lang": ["Data View", "close", "refresh"] }, "mark": { "show": true, "title": { "mark": "辅助线开关", "markClear": "清空辅助线", "markUndo": "删除辅助线" }, "lineStyle": { "color": "#1e90ff", "type": "dashed", "width": 2 } }, "saveAsImage": { "show": true, "title": "保存为图片", "type": "png", "lang": ["点击保存"] } } }, "tooltip": { "trigger": "axis", "formatter": "Temperature : \u003cbr/\u003e{b}km : {c}°C" }, "legend": { "data": ["高度(km)与气温(°C)变化关系"] }, "xAxis": [{ "type": "value", "axisLabel": { "formatter": "{value} °C" } }], "yAxis": [{ "type": "category", "boundaryGap": false, "axisLine": { "onZero": false }, "axisLabel": { "formatter": "{value} km" }, "data": [ 0, 10, 20, 30, 40, 50, 60, 70, 80 ] }], "series": [{ "smooth": true, "name": "高度(km)与气温(°C)变化关系", "type": "line", "itemStyle": { "normal": { "lineStyle": { "shadowColor": "rgba(0,0,0,0.4)" } }, "emphasis": {} }, "data": [ 15, -50, -56.5, -46.5, -22.1, -2.5, -27.7, -55.7, -76.5 ] }]}
对应的ECharts例子地址: http://echarts.baidu.com/doc/example/pie6.html
测试代码地址:PieTest6.java
@Testpublic void test() { //地址:http://echarts.baidu.com/doc/example/pie6.html ItemStyle dataStyle = new ItemStyle(); dataStyle.normal().label(new Label().show(false)).labelLine().show(false); ItemStyle placeHolderStyle = new ItemStyle(); placeHolderStyle.normal().color("rgba(0,0,0,0)").label(new Label().show(false)).labelLine().show(false); placeHolderStyle.emphasis().color("rgba(0,0,0,0)"); EnhancedOption option = new EnhancedOption(); option.title().text("你幸福吗?") .subtext("From ExcelHome") .sublink("http://e.weibo.com/1341556070/AhQXtjbqh") .x(X.center) .y(Y.center) .itemGap(20) .textStyle().color("rgba(30,144,255,0.8)") .fontFamily("微软雅黑") .fontSize(35) .fontWeight("bolder"); option.tooltip().show(true).formatter("{a} <br/>{b} : {c} ({d}%)"); option.legend().orient(Orient.vertical) .x("(function(){return document.getElementById('main').offsetWidth / 2;})()") .y(56) .itemGap(12) .data("68%的人表示过的不错", "29%的人表示生活压力很大", "3%的人表示“我姓曾”"); option.toolbox().show(true).feature(Tool.mark, Tool.dataView, Tool.restore, Tool.saveAsImage); Pie p1 = new Pie("1"); p1.clockWise(false).radius(125, 150).itemStyle(dataStyle) .data(new Data("68%的人表示过的不错", 68), new Data("invisible", 32).itemStyle(placeHolderStyle)); Pie p2 = new Pie("2"); p2.clockWise(false).radius(100, 125).itemStyle(dataStyle) .data(new Data("29%的人表示生活压力很大", 29), new Data("invisible", 71).itemStyle(placeHolderStyle)); Pie p3 = new Pie("3"); p3.clockWise(false).radius(75, 100).itemStyle(dataStyle) .data(new Data("3%的人表示“我姓曾”", 3), new Data("invisible", 97).itemStyle(placeHolderStyle)); option.series(p1, p2, p3); option.exportToHtml("pie6.html"); option.view();}
这段代码注意
.x("(function(){return document.getElementById('main').offsetWidth / 2;})()")
这个地方,这里巧妙的利用(function(){})()执行JS代码,实现了官方例子中的功能,生成的JSON结果如下:
{ "title": { "text": "你幸福吗?", "subtext": "From ExcelHome", "sublink": "http://e.weibo.com/1341556070/AhQXtjbqh", "textStyle": { "color": "rgba(30,144,255,0.8)", "fontSize": 35, "fontFamily": "微软雅黑", "fontWeight": "bolder" }, "x": "center", "y": "center", "itemGap": 20 }, "toolbox": { "feature": { "restore": { "show": true, "title": "还原" }, "dataView": { "show": true, "title": "数据视图", "readOnly": false, "lang": ["Data View", "close", "refresh"] }, "mark": { "show": true, "title": { "mark": "辅助线开关", "markClear": "清空辅助线", "markUndo": "删除辅助线" }, "lineStyle": { "color": "#1e90ff", "type": "dashed", "width": 2 } }, "saveAsImage": { "show": true, "title": "保存为图片", "type": "png", "lang": ["点击保存"] } }, "show": true }, "tooltip": { "show": true, "formatter": "{a} <br/>{b} : {c} ({d}%)" }, "legend": { "orient": "vertical", "data": ["68%的人表示过的不错", "29%的人表示生活压力很大", "3%的人表示“我姓曾”"], "x": (function() { return document.getElementById('main').offsetWidth / 2; })(), "y": 56, "itemGap": 12 }, "series": [{ "radius": [125, 150], "clockWise": false, "name": "1", "type": "pie", "itemStyle": { "normal": { "label": { "show": false }, "labelLine": { "show": false } } }, "data": [{ "name": "68%的人表示过的不错", "value": 68 }, { "name": "invisible", "value": 32, "itemStyle": { "normal": { "label": { "show": false }, "labelLine": { "show": false }, "color": "rgba(0,0,0,0)" }, "emphasis": { "color": "rgba(0,0,0,0)" } } }] }, { "radius": [100, 125], "clockWise": false, "name": "2", "type": "pie", "itemStyle": { "normal": { "label": { "show": false }, "labelLine": { "show": false } } }, "data": [{ "name": "29%的人表示生活压力很大", "value": 29 }, { "name": "invisible", "value": 71, "itemStyle": { "normal": { "label": { "show": false }, "labelLine": { "show": false }, "color": "rgba(0,0,0,0)" }, "emphasis": { "color": "rgba(0,0,0,0)" } } }] }, { "radius": [75, 100], "clockWise": false, "name": "3", "type": "pie", "itemStyle": { "normal": { "label": { "show": false }, "labelLine": { "show": false } } }, "data": [{ "name": "3%的人表示“我姓曾”", "value": 3 }, { "name": "invisible", "value": 97, "itemStyle": { "normal": { "label": { "show": false }, "labelLine": { "show": false }, "color": "rgba(0,0,0,0)" }, "emphasis": { "color": "rgba(0,0,0,0)" } } }] }]};
这里集成java语言,做了一个demo。我这里做的是tag标签的写法,为了更加通用,这里也分享给大家了。 所需要的包,可以直接下载,东西挺多的,按需引入。 开始上代码。 首先是tag,这个东西,大学之后,几乎不怎么用了,没想到现在又用到了。 <%@ tag pageEncoding="UTF-8" isELIgnored="false" body-content="empty"%> <%--自定义
这是一个针对ECharts3.x(2.x)版本的Java类库,实现了所有ECharts中的Json结构对应的Java对象,并且可以很方便的创建Option ECharts - Java类库 本项目短域名为 http://echarts.tk 当前版本3.0.0 本项目是一个供Java开发使用的ECharts的开发包,主要目的是方便在Java中构造ECharts中可能用到的全部数据结构,如完整的结构
ECharts是一款功能非常强大的JavaScript图表库, 本项目是一个供Java开发使用的ECharts的开发包,主要目的是方便在Java中构造ECharts中可能用到的全部数据结构,如完整的结构 Option。Option中的数据Series,包含Bar-柱状图,Line-折线图,Pie-饼图,Chord-和弦图等,支持ECharts中的 所有图表。支持所有的Style类,如AreaSty
package com.cn.stephen.echarts.service; import java.util.HashMap; import java.util.Map; import org.springframework.stereotype.Service; import com.github.abel533.echarts.Option; import com.github.abel5
后端代码: @Controller @RequestMapping("/echart") public class EchartsController { /** * 饼图 测试用例 * @return */ @RequestMapping(value = "/pie",method = RequestMethod.PO
这是一个针对 ECharts 2.0 版本的Java类库,实现了所有ECharts中的Json结构对应的Java对象,并且可以很方便的创建Option 本项目是一个供Java开发使用的ECharts的开发包,主要目的是方便在Java中构造ECharts中可能用到的全部数据结构,如完整的结构 Option。Option中的数据Series,包含Bar-柱状图,Line-折线图,Pie-饼图,Chor
ECharts-Java 寻求合作… 由于我自己没时间维护这个项目,经常使用的朋友,如果想要参与,可以和我联系。 邮箱:abel533@gmail.com 项目地址: https://github.com/abel533/Echarts http://git.oschina.net/free/ECharts
package echarts; import com.github.abel533.echarts.Option; import com.github.abel533.echarts.axis.CategoryAxis; import com.github.abel533.echarts.axis.ValueAxis; import com.github.abel533.echarts.code
package com.resset.datav.cache; import java.sql.Timestamp; import java.util.List; import com.github.abel533.echarts.AxisPointer; import com.github.abel533.echarts.DataZoom; import com.github.abel533
Layui 引入echarts-gl报错问题 前言: layui : 后台管理的一个前端框架 echarts:非常强大的报表插件 问题: layui 引入2.27版本一切功能正常,官方发行最新稳定版为3.0. 有一个需求需要使用到3D曲线,引入echarts-gl(多个版本都试了,均报错) 3D画图只能用echarts-gl 解决: 修改echarts-gl源码,将报错解决 【新问题】 gl报错提
http://www.oschina.net/p/echarts-java http://my.oschina.net/flags/blog/316920
echarts-master/ echarts-master/.editorconfig echarts-master/.github/ echarts-master/.github/CONTRIBUTING.md echarts-master/.github/ISSUE_TEMPLATE.md echarts-master/.gitignore echarts-master/.jshintrc
ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari 等),底层依赖轻量级的矢量图形库 ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表。 ECharts 提供了常规的折线图、柱状图、散点图、饼图、K线图,用于统计的盒形图,用于地理数据
ECharts-X是 ECharts 团队推出的全新 3D 可视化库,它是基于 ECharts 的扩展,底层深度整合了 WebGL 库QTEK和 Canvas2D 库ZRender。 特色 混搭 ECharts 里的混搭功能很强大,作为 ECharts 的扩展,ECharts-X 自然也需要支持。ECharts-X 能跟 ECharts 中的折柱饼地图等图表混搭,可以有更丰富的可视化效果,同时 E
Apache ECharts 是一款基于Javascript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。 Apache ECharts 始终致力于让开发者以更方便的方式创造灵活丰富的可视化作品。在最新推出的 Apache ECharts 5,我们着力加强了图表的叙事能力,让开发者可以以更简单的方式,讲述数据背后的故事。 “表·达”是 Apache ECharts 5
ngx-echarts Angular directive for Apache ECharts (incubating)(version >= 3.x) (The project is renamed from angular2-echarts) Online Demo Online Docs Starter Project Changelog Table of contents ngx-ech
本项目能够将百度的 ECharts (echarts2) 工具封装成对应的 iOS 的控件,并且将其中 javascript 的属性封装成对应的对象。并且提供了链式编程,方面大家进行配置 Echarts 的属性。方便程序员在编写程序的过程中更加关注 OC 的代码,避免在使用百度的 ECharts 工具的过程中过多的关注 javascript 语法和与 javascript 之间的交互。 有两种方法
Echarts-PHP 是一个对echarts js封装的PHP库。 安装方法: composer require "hisune/echarts-php" Echarts-PHP使用PHP的property来绑定echarts js的options,同时支持所有options的IDE代码提示,使用非常方便。 所有IDE自动提示的PHPDoc都由脚本自动生成,因此当echarts js的optio