最近要做一个任务,统计一个时间段,不同应用商城本公司APP的下载量趋势图。
大概效果是这样的,你先选择时间,然后点击不同的商城,就会画出该渠道的下载量趋势图:
选择不同商城,会画出不同的曲线。
实现如下:
echarts本身就已经实现了很多功能,我们需要的是完成数据的填入:
var option = {
title: {
text: '下载量趋势图',
subtext: 'test'
},
tooltip: {
trigger: 'axis',
},
legend: {
data: ['下载量'],
},
toolbox: {
show: true,
feature: {
mark: {show: true},
dataView: {show: true, readOnly: false},
magicType: {show: true, type: ['line', 'bar']},
restore: {show: true},
saveAsImage: {show: true}
}
},
calculable: true,
xAxis: [
{
type: 'category',
boundaryGap: false,
data: ['一', '二', '三', '四', '五', '六', '日']
}
],
yAxis: [
{
type: 'value',
axisLabel: {
formatter: '{value} 个'
}
}
],
series: [
{
name: '下载量',
type: 'line',
data: [0, 0, 0, 0, 0, 0, 0],
markPoint: {
data: [
{type: 'max', name: '最大值'},
{type: 'min', name: '最小值'}
]
},
markLine: {
data: [
{type: 'average', name: '平均值'}
]
}
}
]
};
这是echarts的模板,其实他本身就可以画一个图了,但是要实用的话,我们必须让他和后台交互才行。
首先,要把前台的数据传给后台,我们这里要传的就是时间段和哪个商场:
<div style="height:50px;width: 100%" align="right">
<select id="regularTime">
<option>一周</option>
<option>一个月</option>
<option>一个季度</option>
</select>
</div>
<div style="height:50px;width: 100%" align="center">
<a href="#" id="xiaomi">小米</a>
<a href="#" id="meizu">魅族</a>
<a href="#" id="huawei">华为</a>
<a href="#" id="pingguo">苹果</a>
</div>
然后设置点击超链接的时候发送ajax请求,然后对响应的结果去填充echarts的模板:
var allA = $('a');
for (var i = 0; i < allA.length; i++) {
allA.eq(i).bind('click', function () {
var y = $(this).attr('id');//找到点击了哪个超链接
var myChannel = {};//构建json数据,用于发送给后台
myChannel.channel = y;
myChannel.time = document.getElementById("regularTime").value;
document.getElementById("currentId").innerHTML = '当前:' + y;//给标题赋值,标明现在的折线图是那个商城的
$.ajax({//发送请求
type: "POST",
contentType: "application/json; charset=utf-8",
url: "/jsontest",
data: JSON.stringify(myChannel),
dataType: "json",
error: function (dataa) {
alert("出错了!!:" + dataa);
},
success: function (dataa) {
option.xAxis[0].data = dataa.time;//对echarts模板进行数据填充
option.series[0].data = dataa.number;
myChart.setOption(option);//重新啊显示
}
});
})
}
后台获取数据,并根据获取的数据做不同的数据返回:
@RequestMapping(value = "/jsontest", produces = "application/json;charset=UTF-8")//接收为json数据,自动转化
public @ResponseBody Echarts json(@RequestBody MyChannel myChannel) {
System.out.println(myChannel);
Echarts echarts = new Echarts();
List<String> time = Arrays.asList("7-2", "7-3", "7-4", "7-5", "7-6","7-7","7-8");
List<Integer> number = null;
if ("xiaomi".equals(myChannel.getChannel())) {//这里我们根据不同的前台数据,给出不同的注册量
number = Arrays.asList(2, 4, 6, 2, 8, 8, 4, 8, 2, 4, 6, 4, 2, 1, 9);
} else if ("meizu".equals(myChannel.getChannel())) {
number = Arrays.asList(3, 5, 6, 12, 3, 8, 2, 9, 1, 5, 9, 5, 4, 6, 8);
} else if ("huawei".equals(myChannel.getChannel())) {
number = Arrays.asList(2, 5, 1, 3, 6, 4, 2, 5, 5, 8, 1, 6, 23, 1, 4);
} else {
number = Arrays.asList(4, 8, 2, 4, 6, 3, 1, 9, 5, 2, 5, 6, 3, 4, 2);
}
echarts.setTime(time);
echarts.setNumber(number);
return echarts;
}
完整代码地址:https://github.com/zhanxupeng/echarts