Echarts数据可视化
效果图(前段框架为:EasyUI):
一、饼图
(1)服务端传输到前段的数据格式为List<Map>,数据如下
[
{name: "儿童食品", y: 4540.5},
{name: "调味品", y: 1266},
{name: "水果", y: 2200}
]
(2)Html代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>销售额统计</title>
<link rel="stylesheet" type="text/css" href="ui/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="ui/themes/icon.css">
<script type="text/javascript" src="ui/jquery.min.js"></script>
<script type="text/javascript" src="ui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="ui/locale/easyui-lang-zh_CN.js"></script>
<script type="text/javascript" src="ui/jquery.serializejson.min.js"></script>
<script type="text/javascript" src="ui/echarts.js"></script>
<script type="text/javascript" src="js/report.js"></script>
</head>
<body class="easyui-layout">
<div data-options="region:'center',title:'销售统计表'" style="padding:4px;background-color:#eee">
<form id="searchForm">
开始日期:<input name="startDate" class="easyui-datebox">
截止日期:<input name="endDate" class="easyui-datebox">
<button type="button" id="btnSearch">查询</button>
</form>
<div style="height: 2px"></div>
<table id="grid"></table>
</div>
<div data-options="region:'east',title:'销售统计图',split:true" style="width:900px;">
<div id="charts" style="min-width: 450px; height: 500px; max-width: 800px; margin: 20px auto"></div>
</div>
</body>
</html>
(3)js代码
$(function () {
$('#grid').datagrid({
url: 'report_ordersReport',
columns: [[
{field: 'name', title: '商品类型', width: 300},
{field: 'y', title: '销售额', width: 300},
]],
singleSelect: true,
onLoadSuccess:function (data) {
// alert(JSON.stringify(data.rows));
showChart(data.rows);
}
});
//点击查询按钮
$('#btnSearch').bind('click', function () {
//把表单数据转换成json对象
var formData = $('#searchForm').serializeJSON();
if (formData.endDate != '') {
formData.endDate += '23:59:59';
}
$('#grid').datagrid('load', formData);
});
});
function showChart(data) {
var myChart = echarts.init(document.getElementById("charts"));
//生成图表数据
myChart.setOption({
//标题属性
title : {
text: '销售统计图',
x:'center'
},
//提示框属性
tooltip : {
trigger: 'item',
formatter: "{a} <br/>{b} : {c} ({d}%)"
},
//保存图片到本地
toolbox: {
feature: {
dataView : {show: true, readOnly: false},
saveAsImage: {}
},
right:50,
top:50
},
//图例属性
legend: {
orient: 'vertical',
// 图例距离左方距离
left: 50,
// 图例距离上方距离
top: 50,
//设置图例值
data: (function(){
var res = [];
for(var i=0;i<data.length;i++){
res.push(data[i].name);
}
return res;
})()
},
//数据
series : [
{
name: '商品类型',
type: 'pie',
radius : '55%',
center: ['50%', '60%'],
//单击时,弹出该商品类型区域
selectedMode: 'single',
//显示的提示框
label: {
normal: {
formatter: '{a|{a}}{abg|}\n{hr|}\n {b|{b}:}{c} {per|{d}%} ',
backgroundColor: '#eee',
borderColor: '#aaa',
borderWidth: 1,
borderRadius: 4,
// shadowBlur:3,
// shadowOffsetX: 2,
// shadowOffsetY: 2,
// shadowColor: '#999',
// padding: [0, 7],
rich: {
a: {
color: '#999',
lineHeight: 22,
align: 'center'
},
hr: {
borderColor: '#aaa',
width: '100%',
borderWidth: 0.5,
height: 0
},
b: {
fontSize: 16,
lineHeight: 33
},
per: {
color: '#eee',
backgroundColor: '#334455',
padding: [2, 4],
borderRadius: 2
}
}
}
},
// 设置数据
data:function(){
var res = [];
for(var i=0;i<data.length;i++){
res.push({
name:data[i].name,
value:data[i].y
});
}
return res;
}()
},
],itemStyle: {
emphasis: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
});
}
二、折线图
(1)服务端传输到前段的数据格式为List<Map>,数据如下
[
{"name":"1月","y":0},
{"name":"2月","y":0},
{"name":"3月","y":0},
{"name":"4月","y":0},
{"name":"5月","y":0},
{"name":"6月","y":8006.5},
{"name":"7月","y":0},
{"name":"8月","y":0},
{"name":"9月","y":0},
{"name":"10月","y":0},
{"name":"11月","y":0}
,{"name":"12月","y":0}
]
(2)Html代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>销售趋势表</title>
<link rel="stylesheet" type="text/css" href="ui/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="ui/themes/icon.css">
<script type="text/javascript" src="ui/jquery.min.js"></script>
<script type="text/javascript" src="ui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="ui/locale/easyui-lang-zh_CN.js"></script>
<script type="text/javascript" src="ui/jquery.serializejson.min.js"></script>
<script type="text/javascript" src="ui/echarts.js"></script>
<script type="text/javascript" src="js/report_trend.js"></script>
</head>
<body class="easyui-layout">
<div data-options="region:'center',title:'销售统计表'" style="padding:4px;background-color:#eee">
<form id="searchForm">
选择年份:<input name="year" type="text">
<button type="button" id="btnSearch">查询</button>
</form>
<div style="height: 2px"></div>
<table id="grid"></table>
</div>
<div data-options="region:'east',title:'销售统计图',split:true" style="width:1200px;">
<div id="charts" style="min-width: 450px; height: 500px; max-width: 1200px; margin: 20px auto"></div>
</div>
</body>
</html>
(3)js代码
$(function () {
$('#grid').datagrid({
url: 'report_trendReport',
columns: [[
{field: 'name', title: '月份', width: 200},
{field: 'y', title: '销售额', width: 200},
]],
singleSelect: true,
onLoadSuccess:function (data) {
//alert(JSON.stringify(data.rows));
showChart(data.rows);
}
});
//点击查询按钮
$('#btnSearch').bind('click', function () {
//把表单数据转换成json对象
var formData = $('#searchForm').serializeJSON();
$('#grid').datagrid('load', formData);
});
});
function showChart(data) {
var myChart = echarts.init(document.getElementById("charts"));
//生成图表数据
myChart.setOption({
//标题属性
title : {
text: '销售趋势分析',
x:'center'
},
tooltip : {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#6a7985'
}
}
},
toolbox: {
feature: {
dataView : {show: true, readOnly: false},
magicType : {show: true, type: ['line', 'bar']},
restore : {show: true},
saveAsImage: {}
},
right:50,
},
xAxis: {
type: 'category',
data: (function () {
var res = [];
for(var i=0;i<data.length;i++) {
res.push(data[i].name);
}
return res;
})()
},
yAxis: {
type: 'value'
},
series: [
{
data: function () {
var res = [];
for(var i=0;i<data.length;i++) {
res.push(data[i].y);
}
return res;
}(),
type: 'line',
label: {
normal: {
position: 'top',
show: true
}
},
}]
});
}