1、簡介
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依賴以下:git
<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>
2、示例
一、柱狀圖github
1 /** 2 * 柱狀圖 3 * 4 * @param isHorizontal 5 * 是否水平放置 6 */ 7 public void testBar(boolean isHorizontal) { 8 String[] citis = { "廣州", "深圳", "珠海", "汕頭", "韶關", "佛山" }; 9 int[] datas = { 6030, 7800, 5200, 3444, 2666, 5708 }; 10 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)" }; 11 String title = "地市數據"; 12 13 GsonOption option = new GsonOption(); 14 15 option.title(title); // 標題 16 // 工具欄 17 option.toolbox().show(true).feature(Tool.mark, // 輔助線 18 Tool.dataView, // 數據視圖 19 new MagicType(Magic.line, Magic.bar),// 線圖、柱狀圖切換 20 Tool.restore,// 還原 21 Tool.saveAsImage);// 保存爲圖片 22 23 option.tooltip().show(true).formatter("{a} <br/>{b} : {c}");//顯示工具提示,設置提示格式 24 25 option.legend(title);// 圖例 26 27 Bar bar = new Bar(title);// 圖類別(柱狀圖) 28 CategoryAxis category = new CategoryAxis();// 軸分類 29 category.data(citis);// 軸數據類別 30 // 循環數據 31 for (int i = 0; i < citis.length; i++) { 32 int data = datas[i]; 33 String color = colors[i]; 34 // 類目對應的柱狀圖 35 Map<String, Object> map = new HashMap<String, Object>(2); 36 map.put("value", data); 37 map.put("itemStyle", new ItemStyle().normal(new Normal().color(color))); 38 bar.data(map); 39 } 40 41 if (isHorizontal) {// 橫軸爲類別、縱軸爲值 42 option.xAxis(category);// x軸 43 option.yAxis(new ValueAxis());// y軸 44 } else {// 橫軸爲值、縱軸爲類別 45 option.xAxis(new ValueAxis());// x軸 46 option.yAxis(category);// y軸 47 } 48 49 option.series(bar); 50 }
生成的json數據以下:json
1 { 2 "title": { 3 "text": "地市數據" 4 }, 5 "toolbox": { 6 "feature": { 7 "mark": { 8 "show": true, 9 "title": { 10 "mark": "輔助線開關", 11 "markClear": "清空輔助線", 12 "markUndo": "刪除輔助線" 13 }, 14 "lineStyle": { 15 "color": "#1e90ff", 16 "type": "dashed", 17 "width": 2 18 } 19 }, 20 "dataView": { 21 "show": true, 22 "title": "數據視圖", 23 "readOnly": false, 24 "lang": ["數據視圖", "關閉", "刷新"] 25 }, 26 "magicType": { 27 "show": true, 28 "title": { 29 "line": "折線圖切換", 30 "stack": "堆積", 31 "bar": "柱形圖切換", 32 "tiled": "平鋪" 33 }, 34 "type": ["line", "bar"] 35 }, 36 "restore": { 37 "show": true, 38 "title": "還原" 39 }, 40 "saveAsImage": { 41 "show": true, 42 "title": "保存爲圖片", 43 "type": "png", 44 "lang": ["點擊保存"] 45 } 46 }, 47 "show": true 48 }, 49 "tooltip": { 50 "formatter": "{a} <br/>{b} : {c}", 51 "show": true 52 }, 53 "legend": { 54 "data": ["地市數據"] 55 }, 56 "xAxis": [{ 57 "type": "category", 58 "data": ["廣州", "深圳", "珠海", "汕頭", "韶關", "佛山"] 59 }], 60 "yAxis": [{ 61 "type": "value" 62 }], 63 "series": [{ 64 "name": "地市數據", 65 "type": "bar", 66 "data": [{ 67 "value": 6030, 68 "itemStyle": { 69 "normal": { 70 "color": "rgb(2,111,230)" 71 } 72 } 73 }, { 74 "value": 7800, 75 "itemStyle": { 76 "normal": { 77 "color": "rgb(186,73,46)" 78 } 79 } 80 }, { 81 "value": 5200, 82 "itemStyle": { 83 "normal": { 84 "color": "rgb(78,154,97)" 85 } 86 } 87 }, { 88 "value": 3444, 89 "itemStyle": { 90 "normal": { 91 "color": "rgb(2,111,230)" 92 } 93 } 94 }, { 95 "value": 2666, 96 "itemStyle": { 97 "normal": { 98 "color": "rgb(186,73,46)" 99 } 100 } 101 }, { 102 "value": 5708, 103 "itemStyle": { 104 "normal": { 105 "color": "rgb(78,154,97)" 106 } 107 } 108 }] 109 }] 110 }
生成的圖以下:後端
二、折線圖maven
1 /** 2 * 折線圖 3 * 4 * @param isHorizontal 5 * 是否水平放置 6 */ 7 public void testLine(boolean isHorizontal) { 8 String[] types = { "郵件營銷", "聯盟廣告", "視頻廣告" }; 9 int[][] datas = { { 120, 132, 101, 134, 90, 230, 210 }, { 220, 182, 191, 234, 290, 330, 310 }, { 150, 232, 201, 154, 190, 330, 410 } }; 10 String title = "廣告數據"; 11 12 GsonOption option = new GsonOption(); 13 14 option.title().text(title).subtext("虛構").x("left");// 大標題、小標題、位置 15 16 // 提示工具 17 option.tooltip().trigger(Trigger.axis);// 在軸上觸發提示數據 18 // 工具欄 19 option.toolbox().show(true).feature(Tool.saveAsImage);// 顯示保存爲圖片 20 21 option.legend(types);// 圖例 22 23 CategoryAxis category = new CategoryAxis();// 軸分類 24 category.data("週一", "週二", "週三", "週四", "週五", "週六", "週日"); 25 category.boundaryGap(false);// 起始和結束兩端空白策略 26 27 // 循環數據 28 for (int i = 0; i < types.length; i++) { 29 Line line = new Line();// 三條線,三個對象 30 String type = types[i]; 31 line.name(type).stack("總量"); 32 for (int j = 0; j < datas[i].length; j++) 33 line.data(datas[i][j]); 34 option.series(line); 35 } 36 37 if (isHorizontal) {// 橫軸爲類別、縱軸爲值 38 option.xAxis(category);// x軸 39 option.yAxis(new ValueAxis());// y軸 40 } else {// 橫軸爲值、縱軸爲類別 41 option.xAxis(new ValueAxis());// x軸 42 option.yAxis(category);// y軸 43 } 44 45 }
生成的json數據以下:ide
1 { 2 "title": { 3 "text": "廣告數據", 4 "subtext": "虛構", 5 "x": "left" 6 }, 7 "toolbox": { 8 "feature": { 9 "saveAsImage": { 10 "show": true, 11 "title": "保存爲圖片", 12 "type": "png", 13 "lang": ["點擊保存"] 14 } 15 }, 16 "show": true 17 }, 18 "tooltip": { 19 "trigger": "axis" 20 }, 21 "legend": { 22 "data": ["郵件營銷", "聯盟廣告", "視頻廣告"] 23 }, 24 "xAxis": [{ 25 "boundaryGap": false, 26 "type": "category", 27 "data": ["週一", "週二", "週三", "週四", "週五", "週六", "週日"] 28 }], 29 "yAxis": [{ 30 "type": "value" 31 }], 32 "series": [{ 33 "name": "郵件營銷", 34 "type": "line", 35 "stack": "總量", 36 "data": [120, 132, 101, 134, 90, 230, 210] 37 }, { 38 "name": "聯盟廣告", 39 "type": "line", 40 "stack": "總量", 41 "data": [220, 182, 191, 234, 290, 330, 310] 42 }, { 43 "name": "視頻廣告", 44 "type": "line", 45 "stack": "總量", 46 "data": [150, 232, 201, 154, 190, 330, 410] 47 }] 48 }
生成的圖以下:工具
三、餅圖google
1 /** 2 * 餅圖 3 */ 4 public void testPie() { 5 String[] types = { "郵件營銷", "聯盟廣告", "視頻廣告" }; 6 int[] datas = { 120, 132, 101 }; 7 String title = "廣告數據"; 8 GsonOption option = new GsonOption(); 9 10 option.title().text(title).subtext("虛構").x("center");// 大標題、小標題、標題位置 11 12 // 提示工具 鼠標在每個數據項上,觸發顯示提示數據 13 option.tooltip().trigger(Trigger.item).formatter("{a} <br/>{b} : {c} ({d}%)"); 14 15 // 工具欄 16 option.toolbox().show(true).feature(new Mark().show(true),// 輔助線 17 new DataView().show(true).readOnly(false),// 數據視圖 18 new MagicType().show(true).type(new Magic[] { Magic.pie, Magic.funnel }), //餅圖、漏斗圖切換 19 new Option().series(new Funnel().x("25%").width("50%").funnelAlign(X.left).max(1548)),// 漏斗圖設置 20 Tool.restore,// 還原 21 Tool.saveAsImage);// 保存爲圖片 22 23 option.legend().orient(Orient.horizontal).x("left").data(types);// 圖例及位置 24 25 option.calculable(true);// 拖動進行計算 26 27 Pie pie = new Pie(); 28 29 // 標題、半徑、位置 30 pie.name(title).radius("55%").center("50%", "60%"); 31 32 // 循環數據 33 for (int i = 0; i < types.length; i++) { 34 Map<String, Object> map = new HashMap<String, Object>(2); 35 map.put("value", datas[i]); 36 map.put("name", types[i]); 37 pie.data(map); 38 } 39 40 option.series(pie); 41 }
生成的json數據以下:spa
1 { 2 "calculable": true, 3 "title": { 4 "text": "廣告數據", 5 "subtext": "虛構", 6 "x": "center" 7 }, 8 "toolbox": { 9 "feature": { 10 "mark": { 11 "show": true, 12 "title": { 13 "mark": "輔助線開關", 14 "markClear": "清空輔助線", 15 "markUndo": "刪除輔助線" 16 }, 17 "lineStyle": { 18 "color": "#1e90ff", 19 "type": "dashed", 20 "width": 2 21 } 22 }, 23 "dataView": { 24 "show": true, 25 "title": "數據視圖", 26 "readOnly": false, 27 "lang": ["數據視圖", "關閉", "刷新"] 28 }, 29 "magicType": { 30 "show": true, 31 "title": { 32 "line": "折線圖切換", 33 "stack": "堆積", 34 "bar": "柱形圖切換", 35 "tiled": "平鋪" 36 }, 37 "type": ["pie", "funnel"] 38 }, 39 "restore": { 40 "show": true, 41 "title": "還原" 42 }, 43 "saveAsImage": { 44 "show": true, 45 "title": "保存爲圖片", 46 "type": "png", 47 "lang": ["點擊保存"] 48 } 49 }, 50 "show": true 51 }, 52 "tooltip": { 53 "trigger": "item", 54 "formatter": "{a} <br/>{b} : {c} ({d}%)" 55 }, 56 "legend": { 57 "orient": "horizontal", 58 "data": ["郵件營銷", "聯盟廣告", "視頻廣告"], 59 "x": "left" 60 }, 61 "series": [{ 62 "center": ["50%", "60%"], 63 "radius": "55%", 64 "name": "廣告數據", 65 "type": "pie", 66 "data": [{ 67 "value": 120, 68 "name": "郵件營銷" 69 }, { 70 "value": 132, 71 "name": "聯盟廣告" 72 }, { 73 "value": 101, 74 "name": "視頻廣告" 75 }] 76 }] 77 }
生成的圖以下:.net