echarts-springmvc+echarts实现图表
感谢分享:http://blog.****.net/u013147600/article/details/48182647
效果图:
两种方法实现的效果都一样,不过针对此图的话,感觉方法2更好。
Echarts:参照的例子: http://echarts.baidu.com/doc/example/radar1.html
下面只是关键代码:具体看源码
该项目源码下载:http://download.****.NET/detail/u013147600/9071341
方法1.直接把所需数据传到jsp页面中的js中;
controller类:
- /**
- * @param request
- * @return
- * 在前端js实现图表
- */
- @RequestMapping("/showRadio")
- public ModelAndView showRadio(HttpServletRequest request)
- {
- List<AllocatedBudget> list = service.addInfo();
- String strContext =JSON.toJSONString(list);
- System.out.println(strContext);
- request.setAttribute("strContext",strContext);
- return new ModelAndView("/radio1");
- }
jsp页面:
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- request.setAttribute("home", path);
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>雷达图</title>
- </head>
- <body>
- <h2>雷达图</h2>
- <div id="myRadio" style="height:400px"></div>
- <script type="text/javascript" src="${home }/res/js/echarts.js"></script>
- <script type="text/javascript" src="${home }/res/js/macarons.js"></script>
- <script type="text/javascript">
- var home ="${home}";
- //获取到的数据
- var context =eval('${strContext}');
- //名称数组
- var nameArray = new Array();
- //数据数组
- var dataArray= new Array();
- //将数据进行处理
- for(var i=0;i<context.length;i++)
- {
- nameArray.push(context[i].planName);
- //二维数组- 保存数据
- dataArray[i]= new Array();
- dataArray[i].push(context[i].sales);
- dataArray[i].push(context[i].administration);
- dataArray[i].push(context[i].informationTechology);
- dataArray[i].push(context[i].customerSupport);
- dataArray[i].push(context[i].development);
- dataArray[i].push(context[i].marketing);
- }
- require.config(
- {
- paths:{
- echarts:'res/js'
- }
- });
- require(
- [
- 'echarts',
- 'echarts/chart/radar',
- 'echarts/chart/line'
- ]
- , function(ec)
- {
- var myChart =ec.init(document.getElementById("myRadio"));
- option = {
- title : {
- text: '预算 vs 开销 vs我的开销(Budget vs spending)',
- subtext: '纯属虚构'
- },
- tooltip : {
- trigger: 'axis'
- },
- legend: {
- orient : 'vertical',
- x : 'right',
- y : 'bottom',
- data:nameArray//['预算分配(Allocated Budget)','实际开销(Actual Spending)']
- },
- toolbox: {
- show : true,
- feature : {
- mark : {show: true},
- dataView : {show: true, readOnly: false},
- restore : {show: true},
- saveAsImage : {show: true}
- }
- },
- polar : [
- {
- indicator :
- [
- { text: '销售(sales)', max: 6000},
- { text: '管理(Administration)', max: 16000},
- { text: '信息技术(Information Techology)', max: 30000},
- { text: '客服(Customer Support)', max: 38000},
- { text: '研发(Development)', max: 52000},
- { text: '市场(Marketing)', max: 25000}
- ]
- }
- ],
- calculable : true,
- series : [
- {
- name: '预算 vs 开销(Budget vs spending)',
- type: 'radar',
- data : [
- {
- value:dataArray[0],
- name:nameArray[0]
- } ,
- {
- value:dataArray[1],
- name:nameArray[1]
- },
- {
- value:dataArray[2],
- name:nameArray[2]
- }
- ]
- }
- ]
- };
- myChart.setOption(option);
- }
- );
- </script>
- <script type="text/javascript" src="${home }/res/js/jquery.1.7.2.min.js"></script>
- <script type="text/javascript" src="${home }/res/js/jquery-1.11.3.min.js"></script>
- </body>
- </html>
方法2.在类中生成类似js代码,转换成JSON字符串后传入到jsp页面中
关键jar包:ECharts-2.2.6.jar
下载及介绍地址:http://git.oschina.net/free/ECharts#git-readme (根据百度Echarts的一个开源项目,感谢作者)
RadarServiceImpl.java
- package com.echarts.service.impl;
- import java.util.ArrayList;
- import java.util.List;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import com.echarts.dao.RadarDao;
- import com.echarts.entity.AllocatedBudget;
- import com.echarts.service.RadarService;
- import com.github.abel533.echarts.Option;
- import com.github.abel533.echarts.Polar;
- import com.github.abel533.echarts.code.Orient;
- import com.github.abel533.echarts.code.Tool;
- import com.github.abel533.echarts.code.Trigger;
- import com.github.abel533.echarts.code.X;
- import com.github.abel533.echarts.code.Y;
- import com.github.abel533.echarts.data.Data;
- import com.github.abel533.echarts.feature.DataView;
- import com.github.abel533.echarts.feature.Mark;
- import com.github.abel533.echarts.feature.Restore;
- import com.github.abel533.echarts.feature.SaveAsImage;
- import com.github.abel533.echarts.json.FsonOption;
- import com.github.abel533.echarts.series.Radar;
- /**
- * @author lyx
- *
- * 2015-9-1上午9:04:04
- *
- *com.echarts.service.impl.RadarServiceImpl
- *
- */
- @Service("RadarService")
- public class RadarServiceImpl implements RadarService{
- @Autowired
- private RadarDao dao;
- public List<AllocatedBudget> addInfo() {
- // TODO Auto-generated method stub
- return dao.addInfo();
- }
- public FsonOption radarOption() {
- //获得数据
- List<AllocatedBudget> list = dao.addInfo();
- //option设置
- FsonOption option =new FsonOption();
- option.title("预算 vs 开销 vs 我的开销(Budget vs spending)", "纯属虚构");
- option.tooltip(Trigger.axis);
- //图例
- option.legend().orient(Orient.vertical).x(X.right).y(Y.bottom);//.data("预算分配(Allocated Budget)","实际开销(Actual Spending)","我的开销");
- //图例说明
- for (AllocatedBudget alloc: list) {
- option.legend().data().add(alloc.getPlanName());
- }
- //工具栏
- option.toolbox().show(true).feature(Tool.mark, Tool.dataView, Tool.restore, Tool.saveAsImage);
- option.calculable(true);
- //极坐标
- Polar polar = new Polar();
- polar.indicator(new Data().text("销售(sales)").max(6000),
- new Data().text("管理(Administration)").max(16000),
- new Data().text("信息技术(Information Techology)").max(30000),
- new Data().text("客服(Customer Support)").max(38000),
- new Data().text("研发(Development)").max(52000),
- new Data().text("市场(Marketing)").max(25000));
- option.polar(polar);
- //雷达图
- Radar radar = new Radar("预算 vs 开销(Budget vs spending)");
- //雷达图数据
- for (AllocatedBudget alloc: list) {
- <span style="white-space:pre"> </span>radar.data(new Data().name(alloc.getPlanName().toString()).value(alloc.getSales(),alloc.getAdministration(),alloc.getInformationTechology(),alloc.getCustomerSupport(),alloc.getDevelopment(),alloc.getMarketing()));
- }
- option.series(radar);
- System.out.println(option);
- return option;
- }
- }
controller方法:
- /**
- * @param request
- * @return
- * 在dao层的类中实现Option
- */
- @RequestMapping("/radarOption")
- public ModelAndView radarOption(HttpServletRequest request)
- {
- FsonOption option = service.radarOption();
- request.setAttribute("option", option);
- return new ModelAndView("/rect");
- }
jsp页面
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- request.setAttribute("home", path);
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>雷达图</title>
- </head>
- <body>
- <h2>雷达图</h2>
- <div id="myRadio" style="height:400px"></div>
- <script type="text/javascript" src="${home }/res/js/echarts.js"></script>
- <script type="text/javascript" src="${home }/res/js/macarons.js"></script>
- <script type="text/javascript">
- var home ="${home}";
- require.config({
- paths:
- {
- echarts:'res/js'
- }
- });
- var option = ${option};
- require(
- [
- 'echarts',
- 'echarts/chart/radar',
- 'echarts/chart/line'
- ],
- function(ec)
- {
- var myChart =ec.init(document.getElementById("myRadio"));
- myChart.setOption(option);
- }
- );
- </script>
- <script type="text/javascript" src="${home }/res/js/jquery.1.7.2.min.js"></script>
- <script type="text/javascript" src="${home }/res/js/jquery-1.11.3.min.js"></script>
- </body>
- </html>
运行成功的后页面源码:
- 运行后的js:
- var home ="/springEcharts001";
- require.config({
- paths:
- {
- echarts:'res/js'
- }
- });
- var option = {"calculable":true,
- "legend":{"data":["预算分配","实际开销","我的开销"],"orient":"vertical","x":"right","y":"bottom"},
- "polar":[{"indicator":[{"max":6000,"text":"销售(sales)"},{"max":16000,"text":"管理(Administration)"},
- {"max":30000,"text":"信息技术(Information Techology)"},{"max":38000,"text":"客服(Customer Support)"},
- {"max":52000,"text":"研发(Development)"},{"max":25000,"text":"市场(Marketing)"}]}],
- "series":[{"data":[{"name":"预算分配","value":[4300,10000,28000,35000,50000,19000]},
- {"name":"实际开销","value":[5000,14000,28000,31000,42000,21000]},
- {"name":"我的开销","value":[1000,4000,8000,8000,20000,10000]}],
- "name":"预算 vs 开销(Budget vs spending)","type":"radar"}],
- "title":{"subtext":"纯属虚构","text":"预算 vs 开销 vs 我的开销(Budget vs spending)"},
- "toolbox":{"feature":{"mark":{"lineStyle":{"color":"#1e90ff","type":"dashed","width":2},"show":true,
- "title":{"mark":"辅助线开关","markClear":"清空辅助线","markUndo":"删除辅助线"}},
- "dataView":{"lang":["数据视图","关闭","刷新"],"readOnly":false,"show":true,"title":"数据视图"},
- "restore":{"show":true,"title":"还原"},"saveAsImage":{"lang":["点击保存"],"show":true,"title":"保存为图片","type":"png"}},"show":true},
- "tooltip":{"trigger":"axis"}};
- require(
- [
- 'echarts',
- 'echarts/chart/radar',
- 'echarts/chart/line'
- ],
- function(ec)
- {
- var myChart =ec.init(document.getElementById("myRadio"));
- myChart.setOption(option);
- }
- );