当前位置:   article > 正文

echarts 属性 Java 代码_gsonoption的pie

gsonoption的pie

ECharts - Java类库

当前版本2.2.6

本项目是一个供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数据。

为了便于使用对应版本的ECcharts,本项目的版本号会使用和ECharts相同的版本号。

由于本项目反馈的bug并不多,为了方便每一个开发人员,每次修复bug都会发布一个小版本,并且bug修复只针对当前的大版本进行修复。

Maven坐标

  1. <dependency>
  2. <groupId>com.github.abel533</groupId>
  3. <artifactId>ECharts</artifactId>
  4. <version>2.2.6</version></dependency>

下载地址

ECharts-x.x.x.jar

API文档-2.2.6 下载后解压即可

项目支持

图表类型

  • Line - 折线(面积)图
  • Bar - 柱状(条形)图
  • Scatter - 散点(气泡)图
  • K - K线图
  • Pie - 饼(圆环)图
  • Radar - 雷达(面积)图
  • Chord - 和弦图
  • Force - 力导向布局图
  • Map - 地图
  • Gauge - 仪表盘
  • Funnel - 漏斗图
  • Island - 孤岛图(官方未提供,这里只有数据Island对象)
  • EventRiver - 事件河流图
  • Venn - 韦恩图
  • Tree - 树图
  • Treemap - 矩形树图
  • WordCloud - 词云
  • Heatmap - 热力图

ECharts组件

  • Axis - 坐标轴
  • Grid - 网格
  • Title - 标题
  • Tooltip - 提示
  • Legend - 图例
  • DataZoom - 数据区域缩放
  • DataRange - 值域漫游
  • Toolbox - 工具箱
  • Timeline - 时间线

更新日志

2.2.6

  • 由于echarts.js-2.2.5版本只是修复bug,对本项目没有影响,可以直接用echarts-java-2.2.4,所以跳过2.2.5版本
  • echarts.js-2.2.6新增Option 查找工具,本项目已经完全和这个工具对照过,已经补充部分缺少的属性
  • 新增热力图heatmap,对应测试代码HeatmapTest(如果看不到效果,那就是因为测试中的引用的echarts-all.js还不是2.2.6版本,自己替换就行)

2.2.4

  • TreeMap增加root
  • 官方该版本主要解决一些bug
  • 由于2.2.1,2.2.2,2.2.3版本添加比较匆忙,所以没有进行过测试,但是在2.2.4版本进行了全面的测试,对新增的图表和一些属性进行了测试,所以如果使用2.2.0以后的版本,请直接使用2.2.4版本
  • 测试过程中发现一些官方没有提到的属性,都已经添加到2.2.4版本
  • 新增的4个图表在src/test下面有相应的测试
  • 由于2.2.0~2.2.4间隔周期长,可能存在一些还没发现的bug,主要是少属性或者属性类型的问题,如果大家发现问题,欢迎及时反馈

2.2.3

  • 新增词云WordCloud
  • 新增树图Tree
  • DataRange增加splitList
  • 重要:由于WordCloudTree在2.2.4中才添加的测试,因此修复了一些bug,如果需要这两个新功能,请使用2.2.4版本

2.2.2

  • 新增韦恩图Venn
  • 新增Treemap
  • 新增对数轴LogAxis
  • 重要:由于VennTreemap在2.2.4中才添加的测试,因此修复了一些bug,如果需要这两个新功能,请使用2.2.4版本

2.2.1

  • Gauge去掉precision
  • MarkLine支持边捆绑Boundling
  • Tooltip增加enterable配置项
  • echarts.js-2.2.1大部分为修改bug

2.2.0.4

  • 修改SplitArea继承sunw.io.Serializable的bug,改为java.io.Serializable
  • Axis增加和log类型有关的两个参数(2.2.2版本有效)

2.2.0.3

  • 更新serialVersionUID生成方式(不是默认的1L) - galaxist
  • Option中添加RoamController - galaxist
  • 添加fastjson转换,可以使用FsonOption - galaxist
  • 测试代码添加fastjson对应的FsonOption测试 - galaxist
  • Toolboxfeature改为有序的LinkedHashMap#21
  • BarKbarWidthbarMaxWidth属性#32
  • Legend增加selected属性,可以配置默认选中状态#34
  • 感谢galaxist提交的合并请求,欢迎各位参与

2.2.0.2

  • 修复5个类中部分属性缺少getter和setter的bug

2.2.0.1

  • 增加Serializable序列化

2.2.0

  • Effect增加Type枚举类型,增加属性typebounceDistance
  • MarkLine增加属性smoothnessprecision
  • MarkLine增加Bundling(边捆绑)类型和bundling属性
  • Data数据增加smoothRadian属性,可以用在MarkLinedata
  • 由于KMap都有hoverable属性,因此将该属性提升到父类中

2.1.9

2.1.8.4

  • 解决MarkLine缺少smooth属性的问题,这是2.1.8的最后一个版本。

2.1.8.3

  • DataZoom类中zoomLook属性名字错误,修改为zoomLock

2.1.8.2

  • 解决一个反序列时Axis类型为time时的 bug#12

  • 反序列化不是本项目的重点,估计用的人也不多,但是GsonUtil确实支持,但是不会继续强化。

2.1.8.1

  • 该版本在2.1.8基础上解决该问题:http://www.oschina.net/question/2303268_219485

  • GsonOption解决序列化多余空白的问题

  • GsonOption增加viewexportToHtml方法,和测试类中的EnhancedOption功能完全一样

文档地址

http://git.oschina.net/free/ECharts/wikis/Home

目前文档并不全面,但是我本人并不知道大家需要什么样的文档,所以暂时就这样了,如果有建议可以在这里提建议

http://git.oschina.net/free/ECharts/issues

ECharts网址

http://echarts.baidu.com/

Option说明

  1. Option正式代码中使用,不需要任何依赖。

  2. GsonOption正式代码中可以使用,需要引入Gson包,使用toString()方法可以转换为JSON结构的数据(支持function,详情看下面的function说明)。

  3. EnhancedOption测试专用,主要方便在浏览器中直接查看效果。

  4. 使用GsonOption,FsonOptiontoString()方法返回给前端时,前端需要使用eval('('+optionJsonStr+')')转换为JSON结构

function说明

由于JSON标准中不包含function类型,因而大多数的JSON库都不直接支持这种类型,处理这种类型最简单的方式就是转换为JSON字符串时,对字符串进行处理。

虽然像jackson json和fastjson通过注解或者自定义的实现序列化接口可以实现,毕竟和JSON库的结合太密切了,而且使用起来也很麻烦,不如直接处理字符串,或者在js中处理。

本项目中提供了GSON实现的GsonOption,就是重写了toString()方法,改为输出JSON结构的字符串,并且支持以下两种function形式:

  1. {
  2. formatter:function(value){
  3. return value.substring(0,8);
  4. }}
  5. //和
  6. {
  7. formatter:(function(){
  8. return 'Temperature : <br/>{b}km : {c}°C';
  9. })()}

当然这种形式在Java中书写的时候有着严格的要求:

  1. option.tooltip().trigger(Trigger.axis).formatter("function(value){return value.substring(0,8);}");
  2. option.tooltip().trigger(Trigger.axis).formatter("(function(){return 'Temperature : <br/>{b}km : {c}°C';})()");
  1. 先看第一种,这里的"function中,双引号和function必须连着,中间不能存在空格,否则不会识别。然后是结尾的}",这里也必须连着不能有空格,在首尾这两段代码之间不能出现}",否则会判断出错。如果在{}中的代码有字符串,请使用单引号',双引号出现在单引号内时使用\\"即可。除此之外没有别的限制。

  2. 再看第二种,这里的"(function中,双引号、括号和function必须连着,中间不能存在空格,否则不会识别。然后是结尾的})()",这里也必须连着不能有空格,在首尾这两段代码之间不能出现})()",否则会判断出错。如果在{}中的代码有字符串,请使用单引号',双引号出现在单引号内时使用\\"即可。除此之外没有别的限制。

上述对function的处理很简单,不限制在formatter使用,所有值都能这么写,你可以参考写出自己的Option


 

挑两个例子大概的看看这个Java类库如何使用

第一个例子,简单的折线图

对应的ECharts例子地址: http://echarts.baidu.com/doc/example/line5.html

测试代码地址:LineTest5.java

  1. @Testpublic void test() {
  2. //地址:http://echarts.baidu.com/doc/example/line5.html
  3. EnhancedOption option = new EnhancedOption();
  4. option.legend("高度(km)与气温(°C)变化关系");
  5. option.toolbox().show(true).feature(Tool.mark, Tool.dataView, new MagicType(Magic.line, Magic.bar), Tool.restore, Tool.saveAsImage);
  6. option.calculable(true);
  7. option.tooltip().trigger(Trigger.axis).formatter("Temperature : <br/>{b}km : {c}°C");
  8. ValueAxis valueAxis = new ValueAxis();
  9. valueAxis.axisLabel().formatter("{value} °C");
  10. option.xAxis(valueAxis);
  11. CategoryAxis categoryAxis = new CategoryAxis();
  12. categoryAxis.axisLine().onZero(false);
  13. categoryAxis.axisLabel().formatter("{value} km");
  14. categoryAxis.boundaryGap(false);
  15. categoryAxis.data(0, 10, 20, 30, 40, 50, 60, 70, 80);
  16. option.yAxis(categoryAxis);
  17. Line line = new Line();
  18. 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)");
  19. option.series(line);
  20. option.exportToHtml("line5.html");
  21. option.view();}

代码生成的json结果:

  1. {
  2. "calculable": true,
  3. "toolbox": {
  4. "show": true,
  5. "feature": {
  6. "restore": {
  7. "show": true,
  8. "title": "还原"
  9. },
  10. "magicType": {
  11. "show": true,
  12. "title": {
  13. "line": "折线图切换",
  14. "stack": "堆积",
  15. "bar": "柱形图切换",
  16. "tiled": "平铺"
  17. },
  18. "type": ["line", "bar"]
  19. },
  20. "dataView": {
  21. "show": true,
  22. "title": "数据视图",
  23. "readOnly": false,
  24. "lang": ["Data View", "close", "refresh"]
  25. },
  26. "mark": {
  27. "show": true,
  28. "title": {
  29. "mark": "辅助线开关",
  30. "markClear": "清空辅助线",
  31. "markUndo": "删除辅助线"
  32. },
  33. "lineStyle": {
  34. "color": "#1e90ff",
  35. "type": "dashed",
  36. "width": 2
  37. }
  38. },
  39. "saveAsImage": {
  40. "show": true,
  41. "title": "保存为图片",
  42. "type": "png",
  43. "lang": ["点击保存"]
  44. }
  45. }
  46. },
  47. "tooltip": {
  48. "trigger": "axis",
  49. "formatter": "Temperature : \u003cbr/\u003e{b}km : {c}°C"
  50. },
  51. "legend": {
  52. "data": ["高度(km)与气温(°C)变化关系"]
  53. },
  54. "xAxis": [{
  55. "type": "value",
  56. "axisLabel": {
  57. "formatter": "{value} °C"
  58. }
  59. }],
  60. "yAxis": [{
  61. "type": "category",
  62. "boundaryGap": false,
  63. "axisLine": {
  64. "onZero": false
  65. },
  66. "axisLabel": {
  67. "formatter": "{value} km"
  68. },
  69. "data": [
  70. 0, 10, 20, 30, 40, 50, 60, 70, 80
  71. ]
  72. }],
  73. "series": [{
  74. "smooth": true,
  75. "name": "高度(km)与气温(°C)变化关系",
  76. "type": "line",
  77. "itemStyle": {
  78. "normal": {
  79. "lineStyle": {
  80. "shadowColor": "rgba(0,0,0,0.4)"
  81. }
  82. },
  83. "emphasis": {}
  84. },
  85. "data": [
  86. 15, -50, -56.5, -46.5, -22.1, -2.5, -27.7, -55.7, -76.5
  87. ]
  88. }]}


 

第二个例子,使用(function(){})()执行JS代码

对应的ECharts例子地址: http://echarts.baidu.com/doc/example/pie6.html

测试代码地址:PieTest6.java

  1. @Testpublic void test() {
  2. //地址:http://echarts.baidu.com/doc/example/pie6.html
  3. ItemStyle dataStyle = new ItemStyle();
  4. dataStyle.normal().label(new Label().show(false)).labelLine().show(false);
  5. ItemStyle placeHolderStyle = new ItemStyle();
  6. placeHolderStyle.normal().color("rgba(0,0,0,0)").label(new Label().show(false)).labelLine().show(false);
  7. placeHolderStyle.emphasis().color("rgba(0,0,0,0)");
  8. EnhancedOption option = new EnhancedOption();
  9. option.title().text("你幸福吗?")
  10. .subtext("From ExcelHome")
  11. .sublink("http://e.weibo.com/1341556070/AhQXtjbqh")
  12. .x(X.center)
  13. .y(Y.center)
  14. .itemGap(20)
  15. .textStyle().color("rgba(30,144,255,0.8)")
  16. .fontFamily("微软雅黑")
  17. .fontSize(35)
  18. .fontWeight("bolder");
  19. option.tooltip().show(true).formatter("{a} <br/>{b} : {c} ({d}%)");
  20. option.legend().orient(Orient.vertical)
  21. .x("(function(){return document.getElementById('main').offsetWidth / 2;})()")
  22. .y(56)
  23. .itemGap(12)
  24. .data("68%的人表示过的不错", "29%的人表示生活压力很大", "3%的人表示“我姓曾”");
  25. option.toolbox().show(true).feature(Tool.mark, Tool.dataView, Tool.restore, Tool.saveAsImage);
  26. Pie p1 = new Pie("1");
  27. p1.clockWise(false).radius(125, 150).itemStyle(dataStyle)
  28. .data(new Data("68%的人表示过的不错", 68), new Data("invisible", 32).itemStyle(placeHolderStyle));
  29. Pie p2 = new Pie("2");
  30. p2.clockWise(false).radius(100, 125).itemStyle(dataStyle)
  31. .data(new Data("29%的人表示生活压力很大", 29), new Data("invisible", 71).itemStyle(placeHolderStyle));
  32. Pie p3 = new Pie("3");
  33. p3.clockWise(false).radius(75, 100).itemStyle(dataStyle)
  34. .data(new Data("3%的人表示“我姓曾”", 3), new Data("invisible", 97).itemStyle(placeHolderStyle));
  35. option.series(p1, p2, p3);
  36. option.exportToHtml("pie6.html");
  37. option.view();}

这段代码注意

.x("(function(){return document.getElementById('main').offsetWidth / 2;})()")

这个地方,这里巧妙的利用(function(){})()执行JS代码,实现了官方例子中的功能,生成的JSON结果如下:

  1. {
  2. "title": {
  3. "text": "你幸福吗?",
  4. "subtext": "From ExcelHome",
  5. "sublink": "http://e.weibo.com/1341556070/AhQXtjbqh",
  6. "textStyle": {
  7. "color": "rgba(30,144,255,0.8)",
  8. "fontSize": 35,
  9. "fontFamily": "微软雅黑",
  10. "fontWeight": "bolder"
  11. },
  12. "x": "center",
  13. "y": "center",
  14. "itemGap": 20
  15. },
  16. "toolbox": {
  17. "feature": {
  18. "restore": {
  19. "show": true,
  20. "title": "还原"
  21. },
  22. "dataView": {
  23. "show": true,
  24. "title": "数据视图",
  25. "readOnly": false,
  26. "lang": ["Data View", "close", "refresh"]
  27. },
  28. "mark": {
  29. "show": true,
  30. "title": {
  31. "mark": "辅助线开关",
  32. "markClear": "清空辅助线",
  33. "markUndo": "删除辅助线"
  34. },
  35. "lineStyle": {
  36. "color": "#1e90ff",
  37. "type": "dashed",
  38. "width": 2
  39. }
  40. },
  41. "saveAsImage": {
  42. "show": true,
  43. "title": "保存为图片",
  44. "type": "png",
  45. "lang": ["点击保存"]
  46. }
  47. },
  48. "show": true
  49. },
  50. "tooltip": {
  51. "show": true,
  52. "formatter": "{a} <br/>{b} : {c} ({d}%)"
  53. },
  54. "legend": {
  55. "orient": "vertical",
  56. "data": ["68%的人表示过的不错", "29%的人表示生活压力很大", "3%的人表示“我姓曾”"],
  57. "x": (function() {
  58. return document.getElementById('main').offsetWidth / 2;
  59. })(),
  60. "y": 56,
  61. "itemGap": 12
  62. },
  63. "series": [{
  64. "radius": [125, 150],
  65. "clockWise": false,
  66. "name": "1",
  67. "type": "pie",
  68. "itemStyle": {
  69. "normal": {
  70. "label": {
  71. "show": false
  72. },
  73. "labelLine": {
  74. "show": false
  75. }
  76. }
  77. },
  78. "data": [{
  79. "name": "68%的人表示过的不错",
  80. "value": 68
  81. }, {
  82. "name": "invisible",
  83. "value": 32,
  84. "itemStyle": {
  85. "normal": {
  86. "label": {
  87. "show": false
  88. },
  89. "labelLine": {
  90. "show": false
  91. },
  92. "color": "rgba(0,0,0,0)"
  93. },
  94. "emphasis": {
  95. "color": "rgba(0,0,0,0)"
  96. }
  97. }
  98. }]
  99. }, {
  100. "radius": [100, 125],
  101. "clockWise": false,
  102. "name": "2",
  103. "type": "pie",
  104. "itemStyle": {
  105. "normal": {
  106. "label": {
  107. "show": false
  108. },
  109. "labelLine": {
  110. "show": false
  111. }
  112. }
  113. },
  114. "data": [{
  115. "name": "29%的人表示生活压力很大",
  116. "value": 29
  117. }, {
  118. "name": "invisible",
  119. "value": 71,
  120. "itemStyle": {
  121. "normal": {
  122. "label": {
  123. "show": false
  124. },
  125. "labelLine": {
  126. "show": false
  127. },
  128. "color": "rgba(0,0,0,0)"
  129. },
  130. "emphasis": {
  131. "color": "rgba(0,0,0,0)"
  132. }
  133. }
  134. }]
  135. }, {
  136. "radius": [75, 100],
  137. "clockWise": false,
  138. "name": "3",
  139. "type": "pie",
  140. "itemStyle": {
  141. "normal": {
  142. "label": {
  143. "show": false
  144. },
  145. "labelLine": {
  146. "show": false
  147. }
  148. }
  149. },
  150. "data": [{
  151. "name": "3%的人表示“我姓曾”",
  152. "value": 3
  153. }, {
  154. "name": "invisible",
  155. "value": 97,
  156. "itemStyle": {
  157. "normal": {
  158. "label": {
  159. "show": false
  160. },
  161. "labelLine": {
  162. "show": false
  163. },
  164. "color": "rgba(0,0,0,0)"
  165. },
  166. "emphasis": {
  167. "color": "rgba(0,0,0,0)"
  168. }
  169. }
  170. }]
  171. }]};
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号