https://blog.csdn.net/echo_1510/article/details/105484848
1 饼图
1.1 后端-Controller层
传的是List型数据
/** * 按客户所在城市统计————饼图 * @param model * @return */ @RequestMapping("/show") @ResponseBody public List<Echarts> show(Model model) { List<Echarts> echartsList = clientService.getCity(); System.out.println("echartsList:"+echartsList.get(1).getName()); return echartsList; } @RequestMapping("/showCity") public String showCity() { return "showCity"; }
1.2 前端
showCity.html
需要引入
<script src="https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js"></script>
<script type="text/javascript"> //基于准备好的dom,初始化echarts实例 var myChart = echarts.init(document.getElementById('main')); myChart.clear(); var names = []; var mydata = []; $.ajax({ method: 'get', url: '/show', dataType: 'json', success: function (datas) { for (var i=0;i<datas.length;i++){ names.push(datas[i].name); mydata[i] = {value: datas[i].value, name: datas[i].name}; } // 指定图表的配置项和数据 var option = { title: { text: '客户所在城市统计', left: 'center' }, tooltip: { trigger: 'item', formatter: '{a} <br/>{b} : {c} ({d}%)' }, legend: { orient: 'vertical', left: 'left', data: names }, series: [ { name: '所在城市', type: 'pie', radius: '55%', center: ['50%', '60%'], data: mydata, emphasis: { itemStyle: { shadowBlur: 10, shadowOffsetX: 0, shadowColor: 'rgba(0, 0, 0, 0.5)' } } } ] }; // 使用刚指定的配置项和数据显示图表。 myChart.setOption(option,true); } }); </script>
1.3 关键代码
mydata[i] = {value: datas[i].value, name: datas[i].name};
描述:创建一个数组mydata[],用for循环把后台传来的List整个放进去(注意格式为“{value:xxx, name:xxx}”),在option里的series中通过“data: mydata”传入即可。
var names = []; success: function (datas) { for (var i=0;i<datas.length;i++){ names.push(datas[i].name); ... } }
1.4 注意事项
ajax里的url: 'xxx’要与controller中的@RequestMapping(“xxx”)一致,
eg:上述代码均为/show
须区分ajax所在页面名与url名,eg: 上述代码中的“showCity”与“show”
前端通过ajax的“success: function (xxx)”接收后台传来的数据
1.5 效果展示
2 条形图
2.1 后端-Controller层
/** * 按客户所在城市统计————条形图 * @param model * @return */ @RequestMapping("/showCityBar") public String showCityBar(Model model) { List<Echarts> echartsList = clientService.getCity(); String xcors = ""; String ycors = ""; int size = echartsList.size(); for(int i = 0; i < size-1; i++) { xcors += echartsList.get(i).getName() + ","; ycors += echartsList.get(i).getValue() + ","; } xcors += echartsList.get(size-1).getName(); ycors += echartsList.get(size-1).getValue(); System.out.println(xcors); System.out.println(ycors); model.addAttribute("xcors", xcors); model.addAttribute("ycors", ycors); return "showCityBar"; }
描述:定义一个String型数据,各个值以逗号分隔,X轴、Y轴分别定义。然后通过model.addAttribute(“xcors”, xcors)传给前端。
2.2 前端
showCityBar.html
需要引入
<script src="https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js"></script>
<div id="main" style="width: 600px;height:400px; margin-left: 20%;"></div> <input type="hidden" th:value="${xcors}" id="xcors2"/> <input type="hidden" th:value="${ycors}" id="ycors2"/> <script type="text/javascript"> var xcors2 = document.getElementById("xcors2").value; var ycors2 = document.getElementById("ycors2").value; var xstrs= new Array(); //定义x数组 xstrs=xcors2.split(","); //字符分割 var ystrs= new Array(); //定义y数组 ystrs=ycors2.split(","); //字符分割 var myChart = echarts.init(document.getElementById('main')); var option = { title: { text: '客户所在城市统计' }, tooltip: { trigger: 'axis' }, legend: { data: ['所在城市'] }, toolbox: { show: true, feature: { dataView: {show: true, readOnly: false}, magicType: {show: true, type: ['line', 'bar']}, restore: {show: true}, saveAsImage: {show: true} } }, calculable: true, xAxis: [ { type: 'category', data: xstrs } ], yAxis: [ { type: 'value' } ], series: [ { name: '所在城市', type: 'bar', data: ystrs, markPoint: { data: [ {type : 'max', name: '最大值'}, {type : 'min', name: '最小值'} ] }, markLine: { data: [ {type: 'average', name: '平均值'} ] } } ] }; // 使用刚指定的配置项和数据显示图表。 myChart.setOption(option); </script>
2.3 关键代码
<input type="hidden" th:value="${xcors}" id="xcors2"/>
var xcors2 = document.getElementById("xcors2").value;
var xstrs= new Array(); //定义x数组
xstrs=xcors2.split(","); //字符分割
描述:创建一个input标签,type设置为hidden,在js中通过document.getElementById().value取值,再定义一个xx数组,通过xx.split(",")进行字符分割。最后在option里的series中通过“data: xstrs”传入即可。
2.4 效果展示