隨筆-126  評論-247  文章-5  trackbacks-0

          接上一篇隨筆 JFreeChart 生成 柱狀圖 ,環境及其配置不變,只是將生成柱狀圖的核心類 CylinderAction 替換成 CurveAction,讓 CurveAction來負責折線圖的生成,看下代碼:


          package com.fancy.action;

          import java.awt.Color;
          import java.text.SimpleDateFormat;
          import org.jfree.chart.ChartFactory;
          import org.jfree.chart.JFreeChart;
          import org.jfree.chart.axis.DateAxis;
          import org.jfree.chart.servlet.ServletUtilities;
          import org.jfree.data.time.Month;
          import org.jfree.data.time.TimeSeries;
          import org.jfree.data.time.TimeSeriesCollection;
          /**
           * -----------------------------------------
           * @描述  折線圖
           * @作者  fancy
           * @郵箱  fancydeepin@yeah.net
           * @日期  2012-8-7 <p>
           * -----------------------------------------
           
          */

          public class CurveAction extends BaseAction{

              
          private static final long serialVersionUID = 1L;
              
          private String fileName;
              
              
          public String execute() throws Exception{
                  
                  TimeSeries series2010 
          = new TimeSeries("2010年度", Month.class);
                  TimeSeries series2011 
          = new TimeSeries("2011年度", Month.class);
                  TimeSeriesCollection dataset 
          = new TimeSeriesCollection();
                  
                  series2010.add(
          new Month(12011), 36);
                  series2010.add(
          new Month(22011), 84);
                  series2010.add(
          new Month(32011), 202);
                  series2010.add(
          new Month(42011), 183);
                  series2010.add(
          new Month(52011), 172);
                  series2010.add(
          new Month(62011), 107);
                  series2010.add(
          new Month(72011), 200);
                  series2010.add(
          new Month(82011), 87);
                  series2010.add(
          new Month(92011), 250);
                  series2010.add(
          new Month(102011), 152);
                  series2010.add(
          new Month(112011), 235);
                  series2010.add(
          new Month(122011), 266);
                  

                  series2011.add(
          new Month(12011), 156);
                  series2011.add(
          new Month(22011), 216);
                  series2011.add(
          new Month(32011), 118);
                  series2011.add(
          new Month(42011), 250);
                  series2011.add(
          new Month(52011), 257);
                  series2011.add(
          new Month(62011), 253);
                  series2011.add(
          new Month(72011), 355);
                  series2011.add(
          new Month(82011), 300);
                  series2011.add(
          new Month(92011), 103);
                  series2011.add(
          new Month(102011), 250);
                  series2011.add(
          new Month(112011), 348);
                  series2011.add(
          new Month(122011), 325);
                  
                  dataset.addSeries(series2010);
                  dataset.addSeries(series2011);
                  JFreeChart chart 
          = ChartFactory.createTimeSeriesChart("A產品銷售量""""", dataset, truetruefalse);
                  DateAxis dateaxis 
          = (DateAxis)chart.getXYPlot().getDomainAxis();
                  dateaxis.setDateFormatOverride(
          new SimpleDateFormat("MM月"));
                  chart.setBackgroundPaint(Color.WHITE);
                  fileName 
          = ServletUtilities.saveChartAsPNG(chart, 500300null, getHttpSession());
                  
          return "curve";
              }


              
          public String getFileName() {
                  
          return fileName;
              }


          }



          將 cylinder.jsp 拷貝一份名字改成 curve.jsp,其余不變,訪問:http://localhost:8080/jfreechart-demo/curve.html 的結果如圖示:


          在上圖中,可以看出年度A產品的大概走勢,但并沒有具體的數據值,為使折線上的數據點的數值能夠被顯示出來,下面在 CurveAction 類中添加代碼:


          package com.fancy.action;

          import java.awt.Color;
          import java.awt.Font;
          import java.text.SimpleDateFormat;
          import org.jfree.chart.ChartFactory;
          import org.jfree.chart.JFreeChart;
          import org.jfree.chart.axis.DateAxis;
          import org.jfree.chart.axis.ValueAxis;
          import org.jfree.chart.labels.ItemLabelAnchor;
          import org.jfree.chart.labels.ItemLabelPosition;
          import org.jfree.chart.labels.StandardXYItemLabelGenerator;
          import org.jfree.chart.plot.XYPlot;
          import org.jfree.chart.renderer.xy.XYItemRenderer;
          import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
          import org.jfree.chart.servlet.ServletUtilities;
          import org.jfree.data.time.Month;
          import org.jfree.data.time.TimeSeries;
          import org.jfree.data.time.TimeSeriesCollection;
          import org.jfree.ui.TextAnchor;
          /**
           * -----------------------------------------
           * @描述  折線圖
           * @作者  fancy
           * @郵箱  fancydeepin@yeah.net
           * @日期  2012-8-7 <p>
           * -----------------------------------------
           
          */

          public class CurveAction extends BaseAction{

              
          private static final long serialVersionUID = 1L;
              
          private String fileName;
              
              
          public String execute() throws Exception{
                  
                  TimeSeries series2010 
          = new TimeSeries("2010年度", Month.class);
                  TimeSeries series2011 
          = new TimeSeries("2011年度", Month.class);
                  TimeSeriesCollection dataset 
          = new TimeSeriesCollection();
                  
                  series2010.add(
          new Month(12011), 36);
                  series2010.add(
          new Month(22011), 84);
                  series2010.add(
          new Month(32011), 202);
                  series2010.add(
          new Month(42011), 183);
                  series2010.add(
          new Month(52011), 172);
                  series2010.add(
          new Month(62011), 107);
                  series2010.add(
          new Month(72011), 200);
                  series2010.add(
          new Month(82011), 87);
                  series2010.add(
          new Month(92011), 250);
                  series2010.add(
          new Month(102011), 152);
                  series2010.add(
          new Month(112011), 235);
                  series2010.add(
          new Month(122011), 266);
                  

                  series2011.add(
          new Month(12011), 156);
                  series2011.add(
          new Month(22011), 216);
                  series2011.add(
          new Month(32011), 118);
                  series2011.add(
          new Month(42011), 250);
                  series2011.add(
          new Month(52011), 257);
                  series2011.add(
          new Month(62011), 253);
                  series2011.add(
          new Month(72011), 355);
                  series2011.add(
          new Month(82011), 300);
                  series2011.add(
          new Month(92011), 103);
                  series2011.add(
          new Month(102011), 250);
                  series2011.add(
          new Month(112011), 348);
                  series2011.add(
          new Month(122011), 325);
                  
                  dataset.addSeries(series2010);
                  dataset.addSeries(series2011);
                  JFreeChart chart 
          = ChartFactory.createTimeSeriesChart("A產品銷售量""""", dataset, truetruefalse);
                  DateAxis dateaxis 
          = (DateAxis)chart.getXYPlot().getDomainAxis();
                  dateaxis.setDateFormatOverride(
          new SimpleDateFormat("MM月"));
                  chart.setBackgroundPaint(Color.WHITE);
                  
                  XYPlot plot 
          = (XYPlot)chart.getPlot();
                  XYLineAndShapeRenderer xylineandshaperenderer 
          = (XYLineAndShapeRenderer)plot.getRenderer();
                  
          //設置曲線是否顯示數據點 
                  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"114));
                  plot.setRenderer(xyitem);
                  ValueAxis rangeAxis 
          = plot.getRangeAxis();
                  
          //距離上邊距邊框距離
                  rangeAxis.setUpperMargin(0.3);
                  
          //距離下邊框邊距距離
                  rangeAxis.setLowerMargin(0.5);
                  ValueAxis domainAxis 
          = plot.getDomainAxis();
                  
          // 左邊距 邊框距離   
                  domainAxis.setLowerMargin(0.05);
                  
          // 右邊距 邊框距離,防止最后邊的一個數據靠近了坐標軸。 
                  domainAxis.setUpperMargin(0.1);
                  
                  fileName 
          = ServletUtilities.saveChartAsPNG(chart, 500300null, getHttpSession());
                  
          return "curve";
              }


              
          public String getFileName() {
                  
          return fileName;
              }


          }



          OK,再次訪問的結果如圖示:




            
          posted on 2012-08-07 12:00 fancydeepin 閱讀(2674) 評論(1)  編輯  收藏

          評論:
          # re: JFreeChart 生成 折線圖(Struts2 + Maven3 + JFreeChart)[未登錄] 2012-12-08 23:42 | 流云
          我將上面的例子重新用Myeclipse+struts2.2.1+JFreeChart1.0.14來實踐,但是Tomcat服務沒發啟動喲!希望和你交流一下:QQ:316735818  回復  更多評論
            

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


          網站導航:
           
          主站蜘蛛池模板: 静海县| 安庆市| 禹州市| 大石桥市| 海伦市| 玉树县| 洪湖市| 土默特右旗| 芦山县| 海城市| 丰城市| 郴州市| 张北县| 武强县| 珲春市| 饶河县| 山阴县| 牙克石市| 临高县| 孟州市| 禹城市| 龙井市| 庆阳市| 汉源县| 沂水县| 富川| 沈丘县| 临城县| 南乐县| 鄂尔多斯市| 太谷县| 佛山市| 新竹市| 内黄县| 宁强县| 嘉义县| 罗源县| 长泰县| 盐边县| 宜川县| 秦安县|