午后星期午

          JFreeChart 生成 折線圖(Struts2 + Maven3 + JFreeChart)

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


          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產(chǎn)品銷售量""""", 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 的結(jié)果如圖示:


          在上圖中,可以看出年度A產(chǎn)品的大概走勢,但并沒有具體的數(shù)據(jù)值,為使折線上的數(shù)據(jù)點(diǎn)的數(shù)值能夠被顯示出來,下面在 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產(chǎn)品銷售量""""", 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();
                  
          //設(shè)置曲線是否顯示數(shù)據(jù)點(diǎn) 
                  xylineandshaperenderer.setBaseShapesVisible(true);
                  
          //設(shè)置曲線顯示各數(shù)據(jù)點(diǎn)的值 
                  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);
                  
          // 右邊距 邊框距離,防止最后邊的一個(gè)數(shù)據(jù)靠近了坐標(biāo)軸。 
                  domainAxis.setUpperMargin(0.1);
                  
                  fileName 
          = ServletUtilities.saveChartAsPNG(chart, 500300null, getHttpSession());
                  
          return "curve";
              }


              
          public String getFileName() {
                  
          return fileName;
              }


          }



          OK,再次訪問的結(jié)果如圖示:





             [ 轉(zhuǎn)載出處:http://www.aygfsteel.com/fancydeepin ]

          posted on 2013-12-31 13:48 午后星期午 閱讀(114) 評論(0)  編輯  收藏 所屬分類: JavaEE

          主站蜘蛛池模板: 方城县| 马龙县| 西贡区| 库车县| 陈巴尔虎旗| 工布江达县| 皮山县| 行唐县| 那坡县| 宝应县| 南安市| 富阳市| 屯门区| 南投市| 绥化市| 天等县| 新竹市| 固安县| 岳西县| 嘉兴市| 满洲里市| 宝应县| 准格尔旗| 庐江县| 杭锦后旗| 咸阳市| 明光市| 河东区| 鄯善县| 苍溪县| 汉阴县| 恩平市| 锡林郭勒盟| 周口市| 汪清县| 浦城县| 嘉禾县| 灵寿县| 棋牌| 松阳县| 东明县|