java范例

          java

          JFreeChart 靜態曲線圖(初級入門篇)

          曲線圖
          接著我們來介紹曲線圖的使用。在筆者日常的開發工作中,曲線圖用得最多,它可以用來繪制趨勢圖、統計分析等。首先我們在WebRoot下建立一個line目錄,用來存放曲線圖實例的jsp頁面。我們在該目錄下建立sample1.jsp頁面來做一個簡單的曲線圖的例子。在開始編碼前,讓我們來看看與畫曲線圖密切相關的幾個類:
          1) TimeSeriesCollection
          曲線數據的集合。
          2) TimeSeries
          曲線信息序列。
          3) ChartFactory
          可以利用該類的createTimeSeriesChart方法來創建曲線的JFreeChart對象。
          在下例中,我們顯示阿蜜果的blog在2007年度各月份的訪問量情況,修改后的sample1.jsp的內容如下:
          <%@ page contentType="text/html;charset=GBK"%>
          <%@ page import = "org.jfree.chart.ChartFactory,
                        org.jfree.chart.JFreeChart,
                        org.jfree.chart.servlet.ServletUtilities,
                        org.jfree.chart.title.TextTitle,
                        org.jfree.data.time.TimeSeries,
                        org.jfree.data.time.Month,
                        org.jfree.data.time.TimeSeriesCollection,
                        java.awt.Font"%>
          <%
          //訪問量統計時間線
          TimeSeries timeSeries = new TimeSeries("阿蜜果blog訪問量統計", Month.class);
          //時間曲線數據集合
          TimeSeriesCollection lineDataset = new TimeSeriesCollection();
           
          //構造數據集合
          timeSeries.add(new Month(1, 2007), 11200);
          timeSeries.add(new Month(2, 2007), 9000);
          timeSeries.add(new Month(3, 2007), 6200);
          timeSeries.add(new Month(4, 2007), 8200);
          timeSeries.add(new Month(5, 2007), 8200);
          timeSeries.add(new Month(6, 2007), 12200);
          timeSeries.add(new Month(7, 2007), 13200);
          timeSeries.add(new Month(8, 2007), 8300);
          timeSeries.add(new Month(9, 2007), 12400);
          timeSeries.add(new Month(10, 2007), 12500);
          timeSeries.add(new Month(11, 2007), 13600);
          timeSeries.add(new Month(12, 2007), 12500);
           
          lineDataset.addSeries(timeSeries);
          JFreeChart chart = ChartFactory.createTimeSeriesChart("訪問量統計時間線", "月份", "訪問量", lineDataset, true, true, true);
           
          //設置子標題
          TextTitle subtitle = new TextTitle("2007年度", new Font("黑體", Font.BOLD, 12));
          chart.addSubtitle(subtitle);
          //設置主標題
          chart.setTitle(new TextTitle("阿蜜果blog訪問量統計", new Font("隸書", Font.ITALIC, 15)));
          chart.setAntiAlias(true);
           
          String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session);
          String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename;
          %>
          <img src="<%= graphURL %>"width=500 height=300 border=0 usemap="#<%= filename %>">
          =================================================================

          =================================================================
          有時我們需要顯示各數據點及其數值,這是我們需要對上例進行一點改動,在JFreeChart chart = ChartFactory.createTimeSeriesChart……后,TextTitle subtitle = new TextTitle……前加上如下的代碼:
          XYPlot plot = (XYPlot) chart.getPlot();
          XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)plot.getRenderer();
          //設置網格背景顏色
          plot.setBackgroundPaint(Color.white);
          //設置網格豎線顏色
          plot.setDomainGridlinePaint(Color.pink);
          //設置網格橫線顏色
          plot.setRangeGridlinePaint(Color.pink);
          //設置曲線圖與xy軸的距離
          plot.setAxisOffset(new RectangleInsets(0D, 0D, 0D, 10D));
          //設置曲線是否顯示數據點
          xylineandshaperenderer.setBaseShapesVisible(true);
          //設置曲線顯示各數據點的值
          XYItemRenderer xyitem = plot.getRenderer();  
          xyitem.setBaseItemLabelsVisible(true);  
          xyitem.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
          xyitem.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());
          xyitem.setBaseItemLabelFont(new Font("Dialog", 1, 14));
          plot.setRenderer(xyitem);
              并引入了一些另外的包,引入包的語句變成:
          <%@ page import = "org.jfree.chart.ChartFactory,
                        org.jfree.chart.title.TextTitle,
                        org.jfree.data.time.TimeSeries,
                        org.jfree.data.time.Month,
                        org.jfree.data.time.TimeSeriesCollection,
                        org.jfree.chart.plot.XYPlot,
                        org.jfree.chart.renderer.xy.XYLineAndShapeRenderer,
                        java.awt.Color,
                        org.jfree.ui.RectangleInsets,
                        java.awt.Font,
                        org.jfree.chart.renderer.xy.XYItemRenderer,
                        org.jfree.chart.JFreeChart,
                        org.jfree.chart.servlet.ServletUtilities,
                        org.jfree.chart.labels.*,
                        org.jfree.ui.*"%>
                 運行該實例,效果如下所示:
          ===================================================================

          ===================================================================
          上面兩例的曲線圖都是但曲線的,有時候我們對兩個曲線進行比較,例如對阿蜜果在2006年度和2007年度的blog訪問量進行比較,在此種情況下,我們需要在一個曲線圖中顯示兩個曲線。在此種情況下,我們只需要在sample1.jsp的基礎上新建一個TimeSeries對象,給它添加數據后,將其添加到TimeSeriesCollection型數據集合對象中,修改后的程序主體部分如下所示:
          //訪問量統計時間線
          TimeSeries timeSeries2006 = new TimeSeries("2006年度", Month.class);
          TimeSeries timeSeries2007 = new TimeSeries("2007年度", Month.class);
          //時間曲線數據集合
          TimeSeriesCollection lineDataset = new TimeSeriesCollection();
           
          //構造數據集合
          timeSeries2006.add(new Month(1, 2007), 7200);
          timeSeries2006.add(new Month(2, 2007), 7000);
          timeSeries2006.add(new Month(3, 2007), 4200);
          timeSeries2006.add(new Month(4, 2007), 8200);
          timeSeries2006.add(new Month(5, 2007), 7300);
          timeSeries2006.add(new Month(6, 2007), 8200);
          timeSeries2006.add(new Month(7, 2007), 9200);
          timeSeries2006.add(new Month(8, 2007), 7300);
          timeSeries2006.add(new Month(9, 2007), 9400);
          timeSeries2006.add(new Month(10, 2007), 7500);
          timeSeries2006.add(new Month(11, 2007), 6600);
          timeSeries2006.add(new Month(12, 2007), 3500);
           
          timeSeries2007.add(new Month(1, 2007), 10200);
          timeSeries2007.add(new Month(2, 2007), 9000);
          timeSeries2007.add(new Month(3, 2007), 6200);
          timeSeries2007.add(new Month(4, 2007), 8200);
          timeSeries2007.add(new Month(5, 2007), 8200);
          timeSeries2007.add(new Month(6, 2007), 11200);
          timeSeries2007.add(new Month(7, 2007), 13200);
          timeSeries2007.add(new Month(8, 2007), 8300);
          timeSeries2007.add(new Month(9, 2007), 10400);
          timeSeries2007.add(new Month(10, 2007), 12500);
          timeSeries2007.add(new Month(11, 2007), 10600);
          timeSeries2007.add(new Month(12, 2007), 10500);
           
          lineDataset.addSeries(timeSeries2006);
          lineDataset.addSeries(timeSeries2007);
          JFreeChart chart = ChartFactory.createTimeSeriesChart("訪問量統計時間線", "月份", "訪問量", lineDataset, true, true, true);
           
          //設置子標題
          TextTitle subtitle = new TextTitle("2006/2007年度訪問量對比", new Font("黑體", Font.BOLD, 12));
          chart.addSubtitle(subtitle);
          //設置主標題
          chart.setTitle(new TextTitle("阿蜜果blog訪問量統計", new Font("隸書", Font.ITALIC, 15)));
          chart.setAntiAlias(true);
          該例的運行效果如下:
          ===============================================================

          ===============================================================
          本文通過詳盡的實例講述了如何利用JFreeChart開發常用的柱狀圖、餅圖和曲線圖。從這些實例中可以看出,JFreeChart是我們開發圖表或報表的理想選擇,它簡單易用,并且容易理解,是我們開發的利刃


          *********************************************************************************************
          web.xml 配置如下    完整圖例 + 源碼  http://tech.it168.com/j/2007-09-29/200709291132796.shtml
          <servlet>
          <servlet-name>DisplayChart</servlet-name>
          <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
          </servlet>
          <servlet-mapping>
          <servlet-name>DisplayChart</servlet-name>
          <url-pattern>/DisplayChart</url-pattern>
          </servlet-mapping>

          posted on 2007-10-25 15:54 王波 閱讀(4990) 評論(0)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 德庆县| 阿拉善左旗| 吉水县| 盈江县| 宽甸| 巴林右旗| 岢岚县| 阳高县| 连江县| 宣化县| 渝中区| 金阳县| 滦平县| 西昌市| 荥经县| 东阿县| 民和| 皮山县| 郑州市| 高清| 齐河县| 湘阴县| 菏泽市| 忻城县| SHOW| 巴彦淖尔市| 永仁县| 昌乐县| 惠来县| 奉化市| 郎溪县| 车致| 中西区| 城市| 运城市| 电白县| 富锦市| 德令哈市| 沂南县| 乐陵市| 砚山县|