使用highcharts生成統計圖
關于怎么使用highcharts的文章網絡上并不多見,所以呢花了點時間學了下,現在就給大家分享下我的經驗。
1.開發準備
highcharts的js開發包,json開發包,jquery開發包
這里著重使用json,這是我觀察demo例子發現的,至于怎么從后臺拿到json就要使用jquery的ajax請求和后臺交互。
2.使用servlet取得相關數據并拼接json字符串
package org.lxh;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class GetData extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setCharacterEncoding("UTF-8");
// 添加模擬數據
// 添加3個學生
List<StudentInfo> students = new ArrayList<StudentInfo>();
StudentInfo stuident1 = new StudentInfo();
stuident1.setName("黎明");
List<Integer> allgrade = new ArrayList<Integer>();
allgrade.add(90);
allgrade.add(95);
allgrade.add(80);
allgrade.add(85);
stuident1.setGrade(allgrade);
students.add(stuident1);
StudentInfo stuident2 = new StudentInfo();
stuident2.setName("潘瑋柏");
List<Integer> allgrade2 = new ArrayList<Integer>();
allgrade2.add(60);
allgrade2.add(95);
allgrade2.add(70);
allgrade2.add(50);
stuident2.setGrade(allgrade2);
students.add(stuident2);
StudentInfo stuident3 = new StudentInfo();
stuident3.setName("李宇春");
List<Integer> allgrade3 = new ArrayList<Integer>();
allgrade3.add(68);
allgrade3.add(93);
allgrade3.add(78);
allgrade3.add(59);
stuident3.setGrade(allgrade3);
students.add(stuident3);
//JSONObject json = new JSONObject();
JSONArray array = new JSONArray();
//JSONArray gradeData = new JSONArray();
JSONArray Data;
JSONObject member = null;
member = new JSONObject();
Iterator<StudentInfo> it = students.iterator();
while (it.hasNext()) {
StudentInfo info = it.next();
member.put("name", info.getName());
Data = new JSONArray();
List<Integer> grades = info.getGrade();
Iterator<Integer> iterator = grades.iterator();
while (iterator.hasNext()) {
Data.add(iterator.next());
}
member.put("data", Data);
array.add(member);
}
String str=array.toString();
System.out.println(str);
//json.put("series", array);
//System.out.println(json.toString());
PrintWriter pw = response.getWriter();
//pw.print(json.toString());
pw.print(str);
pw.close();
}
}這里的數據都是我自己弄的測試數據,說到這里可能會有數據全是動態的情況也就是說在圖表上x軸和y軸的數據都是動態的,這樣子就需要嵌套jquery的ajax請求了。以學生成績為例我們就需要分別拼接x軸和y軸的數據了。這個大家靈活控制就好了。
3.前臺顯示數據
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/jquery.js"></script>
<script src="js/highcharts.js"></script>
<script src="js/exporting.js"></script>
<script type="text/javascript">
$(function () {
var chart;
// var total;
$(document).ready(function() {
$.ajax({
type: "POST",
dataType: "JSON",
url: "GetData",
success: function (msg) {
/*var str=JSON.stringify(msg);*/
/*var total=JSON.parse(str);*/
var total=msg;
chart = new Highcharts.Chart({
chart: {
renderTo: 'container',
type: 'column'
},
title: {
text: '學生成績'
},
subtitle: {
text: '09軟件305班'
},
xAxis: {
categories: [
'第一周',
'第二周',
'第三周',
'第四周',
]
},
yAxis: {
min: 0,
title: {
text: '成績 (分)'
}
},
legend: {
layout: 'vertical',
backgroundColor: '#FFFFFF',
align: 'left',
verticalAlign: 'top',
x: 100,
y: 70,
floating: true,
shadow: true
},
tooltip: {
formatter: function() {
return ''+
this.x +': '+ this.y +' mm';
}
},
plotOptions: {
column: {
pointPadding: 0.2,
borderWidth: 0
}
},
series: total
});
}
});
});
});
</script>
</head>
<body>
<div id="container" style="min-width: 400px; height: 400px; margin: 0 auto"></div>
</body>
</html>界面很簡單吧就是把數據的地方換成從后臺取出來的json就OK了。差不多每種類型的圖表都是這樣弄,我這里的x軸我把數據寫死了,大家可以弄成動態的,原理都是一樣的。
來看下效果圖吧

很簡單吧,只要后臺json沒有拼接錯就很好弄了。
轉自:http://blog.csdn.net/chenwill3/article/details/7943758
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!