使用HighCharts实现堆叠条形图
参考官网:https://code.hcharts.cn/demos/hhhhD0
效果图:
这里我主要说一下数据组织和JS中Map的解析:
1.数据组织方式,以这个productNum(示例值:456,345,123)值做为横向坐标,首先思路就是竖向坐标是固定的,那么我们只需要计算出来productNum类型有多少个就可以了,然后创建一个List按照竖向坐标的顺序把每个productNum类型的数据添加到List中,List是固定大小的,因为productNum就竖向坐标这几种;
public HashMap<String, ArrayList<BizQltyProbCountByReasons>> selectQltyDistribution(Long providerId){
ArrayList<BizQltyProbCountByReasons> list = qltyProbMapper.selectQltyDistribution(providerId);
HashMap<String, ArrayList<BizQltyProbCountByReasons>> map= new HashMap<String, ArrayList<BizQltyProbCountByReasons>>();
if(list.size() > 0){
//计算出有多少种productNum型号
for( int i=0; i<list.size(); i++){
if(map.get(list.get(i).getProductNum()) == null){
ArrayList<BizQltyProbCountByReasons> numList = new ArrayList<BizQltyProbCountByReasons>();
numList.add(null);
numList.add(null);
numList.add(null);
numList.add(null);
numList.add(null);
numList.add(null);
numList.add(null);
numList.add(null);
numList.add(null);
map.put(list.get(i).getProductNum(), numList);
}
if("器材".equals(list.get(i).getQualityResons())){
map.get(list.get(i).getProductNum()).set(0, list.get(i));
}else if("软件".equals(list.get(i).getQualityResons())){
map.get(list.get(i).getProductNum()).set(1, list.get(i));
}else if("设备".equals(list.get(i).getQualityResons())){
map.get(list.get(i).getProductNum()).set(2, list.get(i));
}else if("设计".equals(list.get(i).getQualityResons())){
map.get(list.get(i).getProductNum()).set(3, list.get(i));
}else if("操作".equals(list.get(i).getQualityResons())){
map.get(list.get(i).getProductNum()).set(4, list.get(i));
}else if("环境".equals(list.get(i).getQualityResons())){
map.get(list.get(i).getProductNum()).set(5, list.get(i));
}else if("工艺".equals(list.get(i).getQualityResons())){
map.get(list.get(i).getProductNum()).set(6, list.get(i));
}else if("管理".equals(list.get(i).getQualityResons())){
map.get(list.get(i).getProductNum()).set(7, list.get(i));
}else if("其他".equals(list.get(i).getQualityResons())){
map.get(list.get(i).getProductNum()).set(8, list.get(i));
}
}
}
return map;
}
2.HighChart显示数据(主要了解Map在JS中的解析)
$.ajax({
url:"<%=realPath%>/count/selectQltyDistribution",
type:"post",
data:{'providerId':providerId},
dataType:"json",
success:function (result){
var series = [];
var index = 0;
//result返回的是Map类型,这里需要学习一下Map解析如何使用,然后按照要求组着数据即可
$(result).each(function(i){
for (var key in result) { // 遍历Map
var dataCount = [];
var name = '';
for(var i=0; i<result[key].length; i++){
if(result[key][i] != null){
dataCount[i] = result[key][i].count;
name = result[key][i].productNum;
}else{
dataCount[i]=0;
}
}
series[index] = {'name':name,
'data':dataCount};
index++;
}
});
$('#qltycontainer').highcharts({
credits : {
enabled : false
},
chart: {
type: 'bar'
},
title: {
text: '质量问题分布'
},
xAxis: {
categories: ['器材', '软件', '设备', '设计', '操作', '环境', '工艺', '管理', '其他']
},
yAxis: {
min: 0,
title: {
text: ''
}
},
legend: {
reversed: true
},
plotOptions: {
series: {
stacking: 'normal'
}
},
series: series
});
}
});
});
<div id="qltycontainer" style="min-width:400px;height:600px"></div>