利用JFreeChart自动生成分析图
官网: http://www.jfree.org/
主要步骤:
1.导包
activation.jar
jcommon-1.0.8.jar
jfreechart-1.0.6.jar
2.设定数据源
3.向数据源中插值
4.使用ChartFactory来创建JFreeChart
JFreeChart chart = ChartFactory.create...
5.创建文件
注意:只支持png和JPEG格式
JFreeChart可以创建的所有图形:
http://www.jfree.org/jfreechart/samples.html
以饼状图为例
1:将生成图片保存至某个文件夹中
代码如下:
1
package
com.test;
2
3 import java.awt.Color;
4 import java.awt.Font;
5 import java.io.File;
6 import java.io.IOException;
7 import java.util.Hashtable;
8 import java.util.Map;
9 import org.jfree.chart.ChartFactory;
10 import org.jfree.chart.ChartUtilities;
11 import org.jfree.chart.JFreeChart;
12 import org.jfree.chart.title.TextTitle;
13 import org.jfree.data.general.DefaultKeyedValuesDataset;
14
15 /**
16 * 生成饼状图,并将该图保存到指定文件夹中
17 * @author Ying-er
18 * @time 2010-2-5上午11:32:27
19 */
20 public class TestMain{
21 public static void main(String[] args){
22 Map < String,Integer > ht = new Hashtable < String,Integer > ();
23 ht.put( " 美国 " , 139800 );
24 ht.put( " 日本 " , 52900 );
25 ht.put( " 德国 " , 32800 );
26 ht.put( " 中国 " , 30100 );
27 ht.put( " 英国 " , 25700 );
28 ht.put( " 法国 " , 25200 );
29 ht.put( " 意大利 " , 20900 );
30 ht.put( " 西班牙 " , 14100 );
31 ht.put( " 加拿大 " , 13600 );
32 ht.put( " 俄罗斯 " , 11400 );
33
34 float sum = 0 ;
35 for (Integer i:ht.values()){
36 sum += i;
37 }
38
39 // 设定数据源
40 DefaultKeyedValuesDataset piedata = new DefaultKeyedValuesDataset();
41
42 // 向数据源中插值,第一个参数为名称,第二个参数是double数
43 for (String nation:ht.keySet()){
44
45 String temp = String.valueOf((( float )ht.get(nation)) / sum * 100 );
46
47 if (temp.indexOf( " . " ) >= 0 ){
48 String xiaoshu = " 00 " ;
49 String[] arr = temp.split( " [.] " );
50 if (arr[ 1 ].length() > 1 ){
51 xiaoshu = arr[ 1 ].substring( 0 , 2 );
52 }
53 temp = arr[ 0 ] + " . " + xiaoshu;
54 }
55 piedata.setValue(nation + " " + temp + " % " , (( float )ht.get(nation)) / sum * 100 );
56 }
57
58 // 使用ChartFactory来创建JFreeChart
59 JFreeChart chart = ChartFactory.createPieChart( " 2007世界总GDP排名 " , piedata, true ,
60 true , true );
61
62 // 设定图片标题
63 chart.setTitle( new TextTitle( " 2007世界总GDP排名 " , new Font( " 隶书 " , Font.ITALIC, 15 )));
64
65 // 设定背景
66 chart.setBackgroundPaint(Color.white);
67
68 /**
69 * 设定保存的路径
70 */
71 String rfName = " test.jpeg " ;
72 String fileName = " d:/ " + rfName;
73 try {
74 /**
75 * 第一个参数为文件名
76 * 第二个参数为质量,取值从0f-1.0f之间
77 * 第三个参数为哪个chart创建图片
78 * 4:宽度
79 * 5:高度
80 */
81 /**
82 * 注意:只支持JPEG和png格式
83 */
84 ChartUtilities.saveChartAsJPEG( new File(fileName), 0.9f , chart, 600 , 600 );
85 } catch (IOException e) {
86 // TODO Auto-generated catch block
87 e.printStackTrace();
88 }
89 }
90 }
2
3 import java.awt.Color;
4 import java.awt.Font;
5 import java.io.File;
6 import java.io.IOException;
7 import java.util.Hashtable;
8 import java.util.Map;
9 import org.jfree.chart.ChartFactory;
10 import org.jfree.chart.ChartUtilities;
11 import org.jfree.chart.JFreeChart;
12 import org.jfree.chart.title.TextTitle;
13 import org.jfree.data.general.DefaultKeyedValuesDataset;
14
15 /**
16 * 生成饼状图,并将该图保存到指定文件夹中
17 * @author Ying-er
18 * @time 2010-2-5上午11:32:27
19 */
20 public class TestMain{
21 public static void main(String[] args){
22 Map < String,Integer > ht = new Hashtable < String,Integer > ();
23 ht.put( " 美国 " , 139800 );
24 ht.put( " 日本 " , 52900 );
25 ht.put( " 德国 " , 32800 );
26 ht.put( " 中国 " , 30100 );
27 ht.put( " 英国 " , 25700 );
28 ht.put( " 法国 " , 25200 );
29 ht.put( " 意大利 " , 20900 );
30 ht.put( " 西班牙 " , 14100 );
31 ht.put( " 加拿大 " , 13600 );
32 ht.put( " 俄罗斯 " , 11400 );
33
34 float sum = 0 ;
35 for (Integer i:ht.values()){
36 sum += i;
37 }
38
39 // 设定数据源
40 DefaultKeyedValuesDataset piedata = new DefaultKeyedValuesDataset();
41
42 // 向数据源中插值,第一个参数为名称,第二个参数是double数
43 for (String nation:ht.keySet()){
44
45 String temp = String.valueOf((( float )ht.get(nation)) / sum * 100 );
46
47 if (temp.indexOf( " . " ) >= 0 ){
48 String xiaoshu = " 00 " ;
49 String[] arr = temp.split( " [.] " );
50 if (arr[ 1 ].length() > 1 ){
51 xiaoshu = arr[ 1 ].substring( 0 , 2 );
52 }
53 temp = arr[ 0 ] + " . " + xiaoshu;
54 }
55 piedata.setValue(nation + " " + temp + " % " , (( float )ht.get(nation)) / sum * 100 );
56 }
57
58 // 使用ChartFactory来创建JFreeChart
59 JFreeChart chart = ChartFactory.createPieChart( " 2007世界总GDP排名 " , piedata, true ,
60 true , true );
61
62 // 设定图片标题
63 chart.setTitle( new TextTitle( " 2007世界总GDP排名 " , new Font( " 隶书 " , Font.ITALIC, 15 )));
64
65 // 设定背景
66 chart.setBackgroundPaint(Color.white);
67
68 /**
69 * 设定保存的路径
70 */
71 String rfName = " test.jpeg " ;
72 String fileName = " d:/ " + rfName;
73 try {
74 /**
75 * 第一个参数为文件名
76 * 第二个参数为质量,取值从0f-1.0f之间
77 * 第三个参数为哪个chart创建图片
78 * 4:宽度
79 * 5:高度
80 */
81 /**
82 * 注意:只支持JPEG和png格式
83 */
84 ChartUtilities.saveChartAsJPEG( new File(fileName), 0.9f , chart, 600 , 600 );
85 } catch (IOException e) {
86 // TODO Auto-generated catch block
87 e.printStackTrace();
88 }
89 }
90 }
2.将生成图片放到页面上
所执行Servlet代码:
1
package
com.linying.action;
2
3 import java.awt.Color;
4 import java.awt.Font;
5 import java.util.Hashtable;
6 import java.util.Map;
7
8 import javax.servlet.RequestDispatcher;
9 import javax.servlet.ServletException;
10 import javax.servlet.http.HttpServlet;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13
14 import org.jfree.chart.ChartFactory;
15 import org.jfree.chart.JFreeChart;
16 import org.jfree.chart.servlet.ServletUtilities;
17 import org.jfree.chart.title.TextTitle;
18 import org.jfree.data.general.DefaultKeyedValuesDataset;
19
20 /**
21 * 饼图
22 * @author Ying-er
23 *
24 * @time 2009-11-12下午08:03:39
25 *
26 */
27 public class PieChartServlet extends HttpServlet {
28 private static final long serialVersionUID = 56890894234786L ;
29
30 public void doPost(HttpServletRequest request, HttpServletResponse response)
31 throws ServletException, java.io.IOException {
32 request.setCharacterEncoding( " UTF-8 " );
33
34 Map < String,Integer > ht = new Hashtable < String,Integer > ();
35 ht.put( " 美国 " , 139800 );
36 ht.put( " 日本 " , 52900 );
37 ht.put( " 德国 " , 32800 );
38 ht.put( " 中国 " , 30100 );
39 ht.put( " 英国 " , 25700 );
40 ht.put( " 法国 " , 25200 );
41 ht.put( " 意大利 " , 20900 );
42 ht.put( " 西班牙 " , 14100 );
43 ht.put( " 加拿大 " , 13600 );
44 ht.put( " 俄罗斯 " , 11400 );
45
46 float sum = 0 ;
47 for (Integer i:ht.values()){
48 sum += i;
49 }
50
51 // 设定数据源
52 DefaultKeyedValuesDataset piedata = new DefaultKeyedValuesDataset();
53
54 // 向数据源中插值,第一个参数为名称,第二个参数是double数
55 for (String nation:ht.keySet()){
56
57 String temp = String.valueOf((( float )ht.get(nation)) / sum * 100 );
58
59 if (temp.indexOf( " . " ) >= 0 ){
60 String xiaoshu = " 00 " ;
61 String[] arr = temp.split( " [.] " );
62 if (arr[ 1 ].length() > 1 ){
63 xiaoshu = arr[ 1 ].substring( 0 , 2 );
64 }
65 temp = arr[ 0 ] + " . " + xiaoshu;
66 }
67 piedata.setValue(nation + " " + temp + " % " , (( float )ht.get(nation)) / sum * 100 );
68 }
69
70 // 使用ChartFactory来创建JFreeChart
71 JFreeChart chart = ChartFactory.createPieChart( " 2007世界总GDP排名 " , piedata, true ,
72 true , true );
73
74 // 设定图片标题
75 chart.setTitle( new TextTitle( " 2007世界总GDP排名 " , new Font( " 隶书 " , Font.ITALIC, 15 )));
76
77 // 设定背景
78 chart.setBackgroundPaint(Color.white);
79
80 // 创建文件并将图片地址传递到页面
81 String filename = ServletUtilities.saveChartAsPNG(chart, 500 , 300 ,
82 null , request.getSession());
83 String graphURL = request.getContextPath()
84 + " /displayChart?filename= " + filename;
85 request.setAttribute( " graphURL " , graphURL);
86
87 // 标识
88 request.setAttribute( " msg " , " 饼图效果 " );
89
90 // 页面转向
91 RequestDispatcher dispatcher = request
92 .getRequestDispatcher( " /web/page/chart.jsp " );
93 dispatcher.forward(request, response);
94 return ;
95 }
96
97 public void doGet(HttpServletRequest request, HttpServletResponse response)
98 throws ServletException, java.io.IOException {
99 doPost(request, response);
100 }
101 }
102
chart.jsp代码:
2
3 import java.awt.Color;
4 import java.awt.Font;
5 import java.util.Hashtable;
6 import java.util.Map;
7
8 import javax.servlet.RequestDispatcher;
9 import javax.servlet.ServletException;
10 import javax.servlet.http.HttpServlet;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13
14 import org.jfree.chart.ChartFactory;
15 import org.jfree.chart.JFreeChart;
16 import org.jfree.chart.servlet.ServletUtilities;
17 import org.jfree.chart.title.TextTitle;
18 import org.jfree.data.general.DefaultKeyedValuesDataset;
19
20 /**
21 * 饼图
22 * @author Ying-er
23 *
24 * @time 2009-11-12下午08:03:39
25 *
26 */
27 public class PieChartServlet extends HttpServlet {
28 private static final long serialVersionUID = 56890894234786L ;
29
30 public void doPost(HttpServletRequest request, HttpServletResponse response)
31 throws ServletException, java.io.IOException {
32 request.setCharacterEncoding( " UTF-8 " );
33
34 Map < String,Integer > ht = new Hashtable < String,Integer > ();
35 ht.put( " 美国 " , 139800 );
36 ht.put( " 日本 " , 52900 );
37 ht.put( " 德国 " , 32800 );
38 ht.put( " 中国 " , 30100 );
39 ht.put( " 英国 " , 25700 );
40 ht.put( " 法国 " , 25200 );
41 ht.put( " 意大利 " , 20900 );
42 ht.put( " 西班牙 " , 14100 );
43 ht.put( " 加拿大 " , 13600 );
44 ht.put( " 俄罗斯 " , 11400 );
45
46 float sum = 0 ;
47 for (Integer i:ht.values()){
48 sum += i;
49 }
50
51 // 设定数据源
52 DefaultKeyedValuesDataset piedata = new DefaultKeyedValuesDataset();
53
54 // 向数据源中插值,第一个参数为名称,第二个参数是double数
55 for (String nation:ht.keySet()){
56
57 String temp = String.valueOf((( float )ht.get(nation)) / sum * 100 );
58
59 if (temp.indexOf( " . " ) >= 0 ){
60 String xiaoshu = " 00 " ;
61 String[] arr = temp.split( " [.] " );
62 if (arr[ 1 ].length() > 1 ){
63 xiaoshu = arr[ 1 ].substring( 0 , 2 );
64 }
65 temp = arr[ 0 ] + " . " + xiaoshu;
66 }
67 piedata.setValue(nation + " " + temp + " % " , (( float )ht.get(nation)) / sum * 100 );
68 }
69
70 // 使用ChartFactory来创建JFreeChart
71 JFreeChart chart = ChartFactory.createPieChart( " 2007世界总GDP排名 " , piedata, true ,
72 true , true );
73
74 // 设定图片标题
75 chart.setTitle( new TextTitle( " 2007世界总GDP排名 " , new Font( " 隶书 " , Font.ITALIC, 15 )));
76
77 // 设定背景
78 chart.setBackgroundPaint(Color.white);
79
80 // 创建文件并将图片地址传递到页面
81 String filename = ServletUtilities.saveChartAsPNG(chart, 500 , 300 ,
82 null , request.getSession());
83 String graphURL = request.getContextPath()
84 + " /displayChart?filename= " + filename;
85 request.setAttribute( " graphURL " , graphURL);
86
87 // 标识
88 request.setAttribute( " msg " , " 饼图效果 " );
89
90 // 页面转向
91 RequestDispatcher dispatcher = request
92 .getRequestDispatcher( " /web/page/chart.jsp " );
93 dispatcher.forward(request, response);
94 return ;
95 }
96
97 public void doGet(HttpServletRequest request, HttpServletResponse response)
98 throws ServletException, java.io.IOException {
99 doPost(request, response);
100 }
101 }
102
1
<%
@ page contentType
=
"
text/html; charset=UTF-8
"
%>
2 <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
3 < html >
4 < head >
5 < title > JFreeChart图表效果 </ title >
6 < meta http-equiv ="Content-Type" content ="text/html; charset=UTF-8" >
7 < link rel ="stylesheet" rev ="stylesheet" href ="web/css/style.css"
8 type ="text/css" />
9 </ head >
10
11 < body >
12 < div id ="bodyDiv" >
13 < div id ="header" >
14 < jsp:include page ="/web/page/branch/header.jsp" />
15 </ div >
16 < div id ="sidebar" >
17 < jsp:include page ="/web/page/branch/sidebar.jsp" />
18 </ div >
19 < div id ="content" >
20 < table border =0 align ="center" >
21 <%
22 out.print( " <tr> " );
23 String graphURL = ( String )request.getAttribute( " graphURL " );
24 out.print( " <td colspan=4 align=\ " center \ " ><img src=\""+graphURL+ " \ " /></td> " );
25 out.print( " </tr> " );
26 %>
27 </ table >
28 </ div >
29 < div id ="footer" >
30 < jsp:include page ="/web/page/branch/footer.jsp" />
31 </ div >
32 </ div >
33 </ body >
34 </ html >
35
36
37
38
2 <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
3 < html >
4 < head >
5 < title > JFreeChart图表效果 </ title >
6 < meta http-equiv ="Content-Type" content ="text/html; charset=UTF-8" >
7 < link rel ="stylesheet" rev ="stylesheet" href ="web/css/style.css"
8 type ="text/css" />
9 </ head >
10
11 < body >
12 < div id ="bodyDiv" >
13 < div id ="header" >
14 < jsp:include page ="/web/page/branch/header.jsp" />
15 </ div >
16 < div id ="sidebar" >
17 < jsp:include page ="/web/page/branch/sidebar.jsp" />
18 </ div >
19 < div id ="content" >
20 < table border =0 align ="center" >
21 <%
22 out.print( " <tr> " );
23 String graphURL = ( String )request.getAttribute( " graphURL " );
24 out.print( " <td colspan=4 align=\ " center \ " ><img src=\""+graphURL+ " \ " /></td> " );
25 out.print( " </tr> " );
26 %>
27 </ table >
28 </ div >
29 < div id ="footer" >
30 < jsp:include page ="/web/page/branch/footer.jsp" />
31 </ div >
32 </ div >
33 </ body >
34 </ html >
35
36
37
38