隨筆-71  評論-4  文章-0  trackbacks-0
          <一>前言:
              JFreeChart是開放源代碼站點SourceForge.net上的一個JAVA項目。它的功能十分強大,能創建餅圖、柱狀圖(普通柱狀圖以及堆棧柱狀圖)、線圖、區域圖、分布圖、混合圖、甘特圖以及一些儀表盤等等,并可生成PNG或JPG圖片格式文件。
            本人在學習過程中發現,網上很多文章都是講一些JFreeChart的基本應用,而對JFreeChart生成熱點圖表這樣常用的功能雖有所提及卻沒有一個完整的例子,所以我就寫一個簡單示例供大家參考,希望對大家的學習有所幫助。 
          <二>示例說明:
              假設有一個關于程序員北京,上海,廣洲三地程序員學歷,開發語言,薪金情況的調查。首先要以餅圖顯示程序員學歷的分布情況(index.jsp)。點擊餅圖的每一部分會以柱狀圖顯示該層次程序員所用開發語言和薪金的情況(barview.jsp)。重點演示怎樣在餅圖上添加鏈接。

          <三>準備工作:
             1.下載最新版本的JFreeChart,當前為jfreechart-1.0.0-rc1
               下載地址:http://www.jfree.org/jfreechart/index.html
             2.解壓文件,將jfreechart-1.0.0-rc1/lib下的jcommon-1.0.0-rc1.jar,jfreechart-1.0.0-rc1.jar復制到WEB應用的lib目錄下。

             3.在web.xml文件中增加以下內容:

              
          1. <servlet>
          2.         <servlet-name>DisplayChart</servlet-name>
          3.         <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
          4.     </servlet>
          5.     <servlet-mapping>
          6.         <servlet-name>DisplayChart</servlet-name>
          7.         <url-pattern>/servletDisplayChart</url-pattern>
          8.     </servlet-mapping>


          <四>餅圖頁面代碼(index.jsp) 

          1. <%@ page contentType="text/html;charset=GBK"%>
          2. <%@ page import="org.jfree.data.general.DefaultPieDataset"%>
          3. <%@ page import="org.jfree.chart.*"%>
          4. <%@ page import="org.jfree.chart.plot.*"%>
          5. <%@ page import="org.jfree.chart.servlet.ServletUtilities"%>
          6. <%@ page import="org.jfree.chart.labels.StandardPieItemLabelGenerator"%>
          7. <%@ page import="org.jfree.chart.urls.StandardPieURLGenerator"%>
          8. <%@ page import="org.jfree.chart.entity.StandardEntityCollection"%>
          9. <%@ page import="java.io.*"%>
          10. <HTML>
          11. <HEAD>
          12. <META http-equiv=Content-Type content="text/html; charset=GBK">
          13. <TITLE>nacl_zhuang@hotmail.com</TITLE>
          14. </HEAD>
          15. <BODY>
          16. <%
          17. DefaultPieDataset data = new DefaultPieDataset();
          18. data.setValue("高中以下",370);
          19. data.setValue("高中",1530);
          20. data.setValue("大專",5700);
          21. data.setValue("本科",8280); 
          22. data.setValue("碩士",4420);
          23. data.setValue("博士",80); 
          24. PiePlot3D plot = new PiePlot3D(data);//3D餅圖
          25. plot.setURLGenerator(new StandardPieURLGenerator("barview.jsp"));//設定鏈接
          26. JFreeChart chart = new JFreeChart("",JFreeChart.DEFAULT_TITLE_FONT, plot, true);
          27. chart.setBackgroundPaint(java.awt.Color.white);//可選,設置圖片背景色
          28. chart.setTitle("程序員學歷情況調查表");//可選,設置圖片標題
          29. plot.setToolTipGenerator(new StandardPieItemLabelGenerator());
          30. StandardEntityCollection sec = new StandardEntityCollection();
          31. ChartRenderingInfo info = new ChartRenderingInfo(sec);
          32. PrintWriter w = new PrintWriter(out);//輸出MAP信息
          33. //500是圖片長度,300是圖片高度
          34. String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session);
          35. ChartUtilities.writeImageMap(w, "map0", info, false);
          36. String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename; 
          37. %>
          38. <P ALIGN="CENTER">
          39. <img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#map0">
          40. </P>
          41. </BODY>
          42. </HTML


          生成的圖片如下

          在瀏覽器中點右鍵->查看源文件會發現有以下一段HTML代碼: 

          1. <map id="map0" name="map0">
          2. <area shape="poly" coords="247,61,250,61,250,123,250,123" title="博士 = 80" alt="" href="barview.jsp?category=博士&pieIndex=0"/>
          3. <area shape="poly" coords="148,112,153,102,160,92,170,83,182,76,196,70,212,65,229,62,247,61,250,123,250,123" title="碩士 = 4,420" alt="" href="barview.jsp?category=碩士&pieIndex=0"/>
          4. <area shape="poly" coords="324,167,311,173,297,179,282,182,266,185,250,186,234,185,217,183,202,179,188,173,175,167,165,159,157,151,151,142,147,132,146,122,148,112,250,123,250,123" title="本科 = 8,280" alt="" href="barview.jsp?category=本科&pieIndex=0"/>
          5. <area shape="poly" coords="307,72,324,80,338,91,347,103,352,117,352,131,347,144,338,156,324,167,250,123,250,123" title="大專 = 5,700" alt="" href="barview.jsp?category=大專&pieIndex=0"/>
          6. <area shape="poly" coords="261,62,285,65,307,72,250,123,250,123" title="高中 = 1,530" alt="" href="barview.jsp?category=高中&pieIndex=0"/>
          7. <area shape="poly" coords="250,61,261,62,250,123,250,123" title="高中以下 = 370" alt="" href="barview.jsp?category=高中以下&pieIndex=0"/>
          8. </map> 


          這就是MAP信息,我們在IMG標簽中加入usemap="#map0"就可以為餅圖的每一部分加入鏈接。

          <五>柱狀圖頁面代碼:(barview.jsp)

          1. <HTML>
          2. <HEAD>
          3. <META http-equiv=Content-Type content="text/html; charset=GBK">
          4. <TITLE>nacl_zhuang@hotmail.com</TITLE>
          5. </HEAD>
          6. <body>
          7. <%@ page contentType="text/html;charset=GBK"%>
          8. <%@ page import="org.jfree.chart.ChartFactory,
          9. org.jfree.chart.JFreeChart,
          10. org.jfree.chart.plot.PlotOrientation,
          11. org.jfree.chart.servlet.ServletUtilities,
          12. org.jfree.data.category.*"%>
          13. <%
          14. CategoryDataset dataset;
          15. String category=request.getParameter("category");
          16. category= new String(category.getBytes("ISO8859_1"), "GBK");
          17. if(category.equals("本科")||category.equals("高中")||category.equals("大專"))
          18. {
          19. dataset=getDataSet();
          20. }
          21. else if(category.equals("碩士")||category.equals("博士"))
          22. {
          23. dataset=getDataSet2();
          24. }else
          25. {
          26. dataset=getDataSet3();
          27. }
          28. String title=category+"程序員在各城市薪金情況統計";
          29. JFreeChart chart = ChartFactory.createBarChart3D(title, 
          30. "城市",
          31. "薪金",
          32. dataset,
          33. PlotOrientation.VERTICAL,
          34. true,
          35. false,
          36. false);
          37. String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session);
          38. String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
          39. %>
          40. <P ALIGN="CENTER">
          41. <img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= filename %>"
          42. </P>
          43. <%!
          44. private static CategoryDataset getDataSet() {
          45. DefaultCategoryDataset dataset = new DefaultCategoryDataset();
          46. dataset.addValue(2000, "北京""VB");
          47. dataset.addValue(1800, "上海""VB");
          48. dataset.addValue(2200, "廣州""VB");
          49. dataset.addValue(3200, "北京""JAVA");
          50. dataset.addValue(3500, "上海""JAVA");
          51. dataset.addValue(3600, "廣州""JAVA");
          52. dataset.addValue(3300, "北京""DOT NET");
          53. dataset.addValue(3400, "上海""DOT NET");
          54. dataset.addValue(3700, "廣州""DOT NET");
          55. dataset.addValue(2500, "北京""DELPHI");
          56. dataset.addValue(2800, "上海""DELPHI");
          57. dataset.addValue(3200, "廣州""DELPHI");
          58. dataset.addValue(5000, "北京""VC");
          59. dataset.addValue(3500, "上海""VC");
          60. dataset.addValue(4600, "廣州""VC");
          61. return dataset;
          62. }
          63. private static CategoryDataset getDataSet2() {
          64. DefaultCategoryDataset dataset = new DefaultCategoryDataset();
          65. dataset.addValue(2000, "上海""VB");
          66. dataset.addValue(3000, "北京""JAVA");
          67. dataset.addValue(3330, "上海""JAVA");
          68. dataset.addValue(3500, "廣州""JAVA");
          69. dataset.addValue(3500, "北京""DOT NET");
          70. dataset.addValue(4000, "上海""DOT NET");
          71. dataset.addValue(4800, "廣州""DOT NET");
          72. dataset.addValue(2600, "北京""DELPHI");
          73. dataset.addValue(2200, "上海""DELPHI");
          74. dataset.addValue(4000, "北京""VC");
          75. dataset.addValue(4000, "上海""VC");
          76. dataset.addValue(4200, "廣州""VC");
          77. return dataset;
          78. }
          79. private static CategoryDataset getDataSet3() {
          80. DefaultCategoryDataset dataset = new DefaultCategoryDataset();
          81. dataset.addValue(2100, "北京""VB");
          82. dataset.addValue(2200, "上海""VB");
          83. dataset.addValue(2100, "廣州""VB");
          84. dataset.addValue(3000, "北京""JAVA");
          85. dataset.addValue(3200, "上海""JAVA");
          86. dataset.addValue(3600, "廣州""JAVA");
          87. dataset.addValue(4100, "北京""DOT NET");
          88. dataset.addValue(4200, "上海""DOT NET");
          89. dataset.addValue(4160, "廣州""DOT NET");
          90. dataset.addValue(2400, "北京""DELPHI");
          91. dataset.addValue(2600, "上海""DELPHI");
          92. dataset.addValue(2500, "廣州""DELPHI");
          93. dataset.addValue(5400, "北京""VC");
          94. dataset.addValue(5000, "上海""VC");
          95. dataset.addValue(5500, "廣州""VC");
          96. return dataset;
          97. }
          98. %>
          99. </body>
          100. </html> 


          生成圖片如下: 


          <六>后記
          1.這是本人發表的第一篇文章,如有不妥之處,請大家指正[cop]
          2.本人以程序員學歷調查為例,實屬對很多企業不接受低學歷程序員的現象身有感觸[(U)]。本人認為,如果一個低學歷的人真正的的想做程序員,他就會比其他人更加刻苦學習更多的知識。如果一個企業愿意用一個沒有學歷的程序員,他也會對這家企業心存感激,認真工作,不會輕易跳槽。
          posted on 2005-10-24 22:06 zjw_albert 閱讀(162) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 玛沁县| 古蔺县| 苍南县| 志丹县| 武威市| 吉安县| 精河县| 南康市| 安岳县| 富蕴县| 杭锦后旗| 邵阳县| 林西县| 长岛县| 丰顺县| 河池市| 老河口市| 延边| 米泉市| 阳江市| 高唐县| 吉安县| 肇东市| 林西县| 朝阳市| 麦盖提县| 文昌市| 延吉市| 永年县| 桃江县| 镶黄旗| 尼玛县| 新郑市| 子洲县| 天长市| 新安县| 墨脱县| 温州市| 梅州市| 台江县| 临高县|