jfreechart使用總結

          Posted on 2006-07-11 11:31 weibogao 閱讀(1970) 評論(0)  編輯  收藏 所屬分類: ria 、software development



          這里分三部分來介紹 jFreeChart 。第一部分介紹jFreeChart產生
          圖形的流程及相關的重要的類;第二部分介紹四種常用的報表圖(餅圖、柱狀圖、折線圖、時間序列圖);第三部分
          介紹在圖形中增加Item Lable 。
          jFreeChart 的版本是jfreechart-1.0.0-pre2(1)

          [b]一、jFreeChart產生圖形的流程[/b]
          ?? 創建一個數據源(dataset)來包含將要在圖形中顯示的數據,創建一個 JFreeChart 對象來代表要顯示的圖形
          ?? 把圖形輸出
          ?? 重要的類和接口:
          ?? org.jfree.data.general.Dataset? 所有數據源類都要實現的接口
          ?? org.jfree.chart.ChartFactory??? 由它來產生 JFreeChart 對象
          ?? org.jfree.chart.JFreeChart??? 所有對圖形的調整都是通過它噢!!
          ?? org.jfree.chart.plot.Plot??? 通過JFreeChart 對象獲得它,然后再通過它對圖形外部部分(例:坐標軸)調整
          ??????????????????????????????? 注意:它有很多子類,一般都下嗍造型到它的子類!
          ?? org.jfree.chart.renderer.AbstractRenderer???? 通過JFreeChart 對象獲得它,然后再通過它對圖形內部部分
          ??????????????????????????????????????????????? (例:折線的類型)調整。同樣,針對不同類型的報表圖,它有
          ??????????????????????????????????????????????? 著不同的子類實現!在下面我們簡稱它為 Renderer
          ?? 下面我們結合不同類型的圖形來具體分析這個流程。
          ??
          [b]二、餅圖[/b]
          ?? 餅圖的dataset 一般是用PieDataset 接口,具體實現類是 DefaultPieDataset
          ?? 1、創建一個數據源(dataset):
          ??? private static PieDataset createDataset()
          ??? {
          ??????? DefaultPieDataset defaultpiedataset = new DefaultPieDataset(); //注意是DefaultPieDataset??!
          ??????? defaultpiedataset.setValue("One", new Double(43.200000000000003D));
          ??????? defaultpiedataset.setValue("Two", new Double(10D));
          ??????? defaultpiedataset.setValue("Three", new Double(27.5D));
          ??????? defaultpiedataset.setValue("Four", new Double(17.5D));
          ??????? return defaultpiedataset;
          ??? }
          ?? 2、由ChartFactory? 產生 JFreeChart 對象
          ??? private static JFreeChart createChart(PieDataset piedataset)
          ??? {
          ??????? JFreeChart jfreechart = ChartFactory.createPieChart("Pie Chart Demo 1",? //圖形標題名稱
          ????????????????????????????????????????????????????????????? piedataset,?? // dataset
          ????????????????????????????????????????????????????????????? true,????? // legend?
          ????????????????????????????????????????????????????????????? true,???? // tooltips?
          ????????????????????????????????????????????????????????????? false);? //URLs?
          ??????? PiePlot pieplot = (PiePlot)jfreechart.getPlot();? //通過JFreeChart 對象獲得 plot:PiePlot!!
          ??????? pieplot.setNoDataMessage("No data available");??? // 沒有數據的時候顯示的內容
          ??????? return jfreechart;
          ??? }
          ??? 一些重要的方法:
          ??? pieplot.setExplodePercent(0,0.3D) //把Lable 為"One" 的那一塊”挖“出來30%???
          ?? 3、輸出略?
          ??
          [b]三、柱狀圖[/b]
          ?? 柱狀圖的dataset 一般是用CatagoryDataset接口(具體實現類是DefaultCategoryDataset),也會用 IntervalXYDataset
          ?? 接口
          ?? 1、創建一個數據源(dataset):
          ??? private static CategoryDataset createDataset()
          ??? {
          ??????? String series1 = "First";
          ??????? String series2 = "Second";
          ??????? String series3 = "Third";
          ??????? String category1 = "Category 1";
          ??????? String category2 = "Category 2";
          ??????? String category3 = "Category 3";
          ??????? String category4 = "Category 4";
          ??????? String category5 = "Category 5";
          ??????? DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
          ??????? defaultcategorydataset.addValue(1.0D, series1, category1);
          ??????? defaultcategorydataset.addValue(4D, series1, category2);
          ??????? defaultcategorydataset.addValue(3D, series1, category3);
          ??????? defaultcategorydataset.addValue(5D, series1, category4);
          ??????? defaultcategorydataset.addValue(5D, series1, category5);
          ???????
          ??????? defaultcategorydataset.addValue(5D, series2, category1);
          ??????? defaultcategorydataset.addValue(7D, series2, category2);
          ??????? defaultcategorydataset.addValue(6D, series2, category3);
          ??????? defaultcategorydataset.addValue(8D, series2, category4);
          ??????? defaultcategorydataset.addValue(4D, series2, category5);
          ???????
          ??????? defaultcategorydataset.addValue(4D, series3, category1);
          ??????? defaultcategorydataset.addValue(3D, series3, category2);
          ??????? defaultcategorydataset.addValue(2D, series3, category3);
          ??????? defaultcategorydataset.addValue(3D, series3, category4);
          ??????? defaultcategorydataset.addValue(6D, series3, category5);
          ??????? return defaultcategorydataset;
          ??? }
          ?? 2、由ChartFactory? 產生 JFreeChart 對象???
          ??? private static JFreeChart createChart(CategoryDataset categorydataset)
          ??? {
          ??????? JFreeChart jfreechart = ChartFactory.createBarChart("Bar Chart Demo", //圖形標題名稱
          ??????????????????????????????????????????????????????????? "Category",//domain 軸 Lable
          ???????????????????????????????????????????????????????????????????????? 這里先簡單理解為橫坐標Lable好了
          ??????????????????????????????????????????????????????????? "Value", //range 軸 Lable
          ?????????????????????????????????????????????????????????????????????? 這里也先簡單理解為縱坐標Lable好了
          ??????????????????????????????????????????????????????????? categorydataset, //? dataset
          ??????????????????????????????????????????????????????????? PlotOrientation.VERTICAL, //垂直顯示
          ??????????????????????????????????????????????????????????? true, // legend?
          ??????????????????????????????????????????????????????????? true,? // tooltips?
          ??????????????????????????????????????????????????????????? false); //URLs?
          ??????? jfreechart.setBackgroundPaint(Color.white);?? //設定背景色為白色
          ??????? CategoryPlot categoryplot = jfreechart.getCategoryPlot(); //獲得 plot:CategoryPlot??!
          ??????? categoryplot.setBackgroundPaint(Color.lightGray); //設定圖表數據顯示部分背景色
          ??????? categoryplot.setDomainGridlinePaint(Color.white); //橫坐標網格線白色
          ??????? categoryplot.setDomainGridlinesVisible(true); //可見
          ??????? categoryplot.setRangeGridlinePaint(Color.white); //縱坐標網格線白色
          ??????? //下面兩行使縱坐標的最小單位格為整數
          ??????? NumberAxis numberaxis = (NumberAxis)categoryplot.getRangeAxis();
          ??????? numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
          ??????? BarRenderer barrenderer = (BarRenderer)categoryplot.getRenderer(); //獲得renderer 注意這里是下嗍造型
          ???????????????????????????????????????????????????????????????????????????? 到BarRenderer?。?br />??????? barrenderer.setDrawBarOutline(false); // Bar的外輪廓線不畫
          ??????? GradientPaint gradientpaint = new GradientPaint(0.0F, 0.0F, Color.blue,
          ??????? 0.0F, 0.0F, new Color(0, 0, 64));?? //設定特定顏色
          ??????? GradientPaint gradientpaint1 = new GradientPaint(0.0F, 0.0F, Color.green,
          ??????? 0.0F, 0.0F, new Color(0, 64, 0));
          ??????? GradientPaint gradientpaint2 = new GradientPaint(0.0F, 0.0F, Color.red,
          ??????? 0.0F, 0.0F, new Color(64, 0, 0));
          ??????? barrenderer.setSeriesPaint(0, gradientpaint); //給series1 Bar設定上面定義的顏色
          ??????? barrenderer.setSeriesPaint(1, gradientpaint1); //給series2 Bar 設定上面定義的顏色
          ??????? barrenderer.setSeriesPaint(2, gradientpaint2); //給series3 Bar 設定上面定義的顏色
          ??????? CategoryAxis categoryaxis = categoryplot.getDomainAxis();? //橫軸上的 Lable 45度傾斜
          ??????? categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);???????
          ??????? return jfreechart;
          ??? }?
          ??? 一些重要的方法:(增加一塊標記)
          ??????? IntervalMarker intervalmarker = new IntervalMarker(4.5D, 7.5D);
          ??????? intervalmarker.setLabel("Target Range");
          ??????? intervalmarker.setLabelFont(new Font("SansSerif", 2, 11));
          ??????? intervalmarker.setLabelAnchor(RectangleAnchor.LEFT);
          ??????? intervalmarker.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
          ??????? intervalmarker.setPaint(new Color(222, 222, 255, 128));
          ??????? categoryplot.addRangeMarker(intervalmarker, Layer.BACKGROUND);???
          ???????
          [b]四、折線圖[/b]
          ?? 折線圖的dataset 兩種CatagoryDataset接口(具體實現類是DefaultCategoryDataset),XYDataset 接口
          ?? 1、CatagoryDataset接口:????????
          ?? A、創建一個數據源(dataset):
          ??? private static CategoryDataset createDataset()
          ??? {
          ??????? String series1 = "First";
          ??????? String series2 = "Second";
          ??????? String series3 = "Third";
          ??????? String type1 = "Type 1";
          ??????? String type2 = "Type 2";
          ??????? String type3 = "Type 3";
          ??????? String type4 = "Type 4";
          ??????? String type5 = "Type 5";
          ??????? String type6 = "Type 6";
          ??????? String type7 = "Type 7";
          ??????? String type8 = "Type 8";
          ??????? DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
          ??????? defaultcategorydataset.addValue(1.0D, series1, type1);
          ??????? defaultcategorydataset.addValue(4D, series1, type2);
          ??????? defaultcategorydataset.addValue(3D, series1, type3);
          ??????? defaultcategorydataset.addValue(5D, series1, type4);
          ??????? defaultcategorydataset.addValue(5D, series1, type5);
          ??????? defaultcategorydataset.addValue(7D, series1, type6);
          ??????? defaultcategorydataset.addValue(7D, series1, type7);
          ??????? defaultcategorydataset.addValue(8D, series1, type8);
          ???????
          ??????? defaultcategorydataset.addValue(5D, series2, type1);
          ??????? defaultcategorydataset.addValue(7D, series2, type2);
          ??????? defaultcategorydataset.addValue(6D, series2, type3);
          ??????? defaultcategorydataset.addValue(8D, series2, type4);
          ??????? defaultcategorydataset.addValue(4D, series2, type5);
          ??????? defaultcategorydataset.addValue(4D, series2, type6);
          ??????? defaultcategorydataset.addValue(2D, series2, type7);
          ??????? defaultcategorydataset.addValue(1.0D, series2, type8);
          ???????
          ??????? defaultcategorydataset.addValue(4D, series3, type1);
          ??????? defaultcategorydataset.addValue(3D, series3, type2);
          ??????? defaultcategorydataset.addValue(2D, series3, type3);
          ??????? defaultcategorydataset.addValue(3D, series3, type4);
          ??????? defaultcategorydataset.addValue(6D, series3, type5);
          ??????? defaultcategorydataset.addValue(3D, series3, type6);
          ??????? defaultcategorydataset.addValue(4D, series3, type7);
          ??????? defaultcategorydataset.addValue(3D, series3, type8);
          ??????? return defaultcategorydataset;
          ??? }
          ?? B、由ChartFactory? 產生 JFreeChart 對象???? (與上面重復的部分就不再注釋)
          ??? private static JFreeChart createChart(CategoryDataset categorydataset)
          ??? {
          ??????? JFreeChart jfreechart = ChartFactory.createLineChart("Line Chart Demo 1",
          ???????????????????????????????????????????????????????????? "Type",
          ???????????????????????????????????????????????????????????? "Value",
          ???????????????????????????????????????????????????????????? categorydataset,
          ???????????????????????????????????????????????????????????? PlotOrientation.VERTICAL,
          ???????????????????????????????????????????????????????????? true,
          ???????????????????????????????????????????????????????????? true,
          ???????????????????????????????????????????????????????????? false);
          ??????? jfreechart.setBackgroundPaint(Color.white);
          ??????? CategoryPlot categoryplot = (CategoryPlot)jfreechart.getPlot();
          ??????? categoryplot.setBackgroundPaint(Color.lightGray);
          ??????? categoryplot.setRangeGridlinePaint(Color.white);
          ??????? NumberAxis numberaxis = (NumberAxis)categoryplot.getRangeAxis();
          ??????? numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
          ??????? numberaxis.setAutoRangeIncludesZero(true);
          ??????? //獲得renderer 注意這里是下嗍造型到lineandshaperenderer??!
          ??????? LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer)categoryplot.getRenderer();
          ??????? lineandshaperenderer.setShapesVisible(true); //series 點(即數據點)可見
          ??????? lineandshaperenderer.setSeriesStroke(0, new BasicStroke(2.0F, 1, 1, 1.0F, new float[] {
          ??????????? 10F, 6F
          ??????? }, 0.0F)); //定義series為"First"的(即series1)點之間的連線 ,這里是虛線,默認是直線
          ??????? lineandshaperenderer.setSeriesStroke(1, new BasicStroke(2.0F, 1, 1, 1.0F, new float[] {
          ??????????? 6F, 6F
          ??????? }, 0.0F)); //定義series為"Second"的(即series2)點之間的連線
          ??????? lineandshaperenderer.setSeriesStroke(2, new BasicStroke(2.0F, 1, 1, 1.0F, new float[] {
          ??????????? 2.0F, 6F
          ??????? }, 0.0F)); //定義series為"Third"的(即series3)點之間的連線
          ??????? return jfreechart;
          ??? }
          ??????? 一些重要的方法:
          ??????? lineandshaperenderer.setLineVisible(true)? //series 點(即數據點)間有連線可見
          ?? 2、XYDataset 接口:
          ?? A、創建一個數據源(dataset):
          ??? private static XYDataset createDataset()
          ??? {
          ??????? XYSeries xyseries = new XYSeries("First"); //先產生XYSeries 對象
          ??????? xyseries.add(1.0D, 1.0D);
          ??????? xyseries.add(2D, 4D);
          ??????? xyseries.add(3D, 3D);
          ??????? xyseries.add(4D, 5D);
          ??????? xyseries.add(5D, 5D);
          ??????? xyseries.add(6D, 7D);
          ??????? xyseries.add(7D, 7D);
          ??????? xyseries.add(8D, 8D);
          ???????
          ??????? XYSeries xyseries1 = new XYSeries("Second");
          ??????? xyseries1.add(1.0D, 5D);
          ??????? xyseries1.add(2D, 7D);
          ??????? xyseries1.add(3D, 6D);
          ??????? xyseries1.add(4D, 8D);
          ??????? xyseries1.add(5D, 4D);
          ??????? xyseries1.add(6D, 4D);
          ??????? xyseries1.add(7D, 2D);
          ??????? xyseries1.add(8D, 1.0D);
          ???????
          ??????? XYSeries xyseries2 = new XYSeries("Third");
          ??????? xyseries2.add(3D, 4D);
          ??????? xyseries2.add(4D, 3D);
          ??????? xyseries2.add(5D, 2D);
          ??????? xyseries2.add(6D, 3D);
          ??????? xyseries2.add(7D, 6D);
          ??????? xyseries2.add(8D, 3D);
          ??????? xyseries2.add(9D, 4D);
          ??????? xyseries2.add(10D, 3D);
          ???????
          ??????? XYSeriesCollection xyseriescollection = new XYSeriesCollection(); //再用XYSeriesCollection添加入XYSeries 對象
          ??????? xyseriescollection.addSeries(xyseries);
          ??????? xyseriescollection.addSeries(xyseries1);
          ??????? xyseriescollection.addSeries(xyseries2);
          ??????? return xyseriescollection;
          ??? }
          ?? B、由ChartFactory? 產生 JFreeChart 對象
          ??? private static JFreeChart createChart(XYDataset xydataset)
          ??? {
          ??????? JFreeChart jfreechart = ChartFactory.createXYLineChart("Line Chart Demo 2",
          ?????????????????????????????????????????????????????????????? "X",
          ?????????????????????????????????????????????????????????????? "Y",
          ?????????????????????????????????????????????????????????????? xydataset,
          ?????????????????????????????????????????????????????????????? PlotOrientation.VERTICAL,
          ?????????????????????????????????????????????????????????????? true,
          ?????????????????????????????????????????????????????????????? true,
          ?????????????????????????????????????????????????????????????? false);
          ??????? jfreechart.setBackgroundPaint(Color.white);
          ??????? XYPlot xyplot = (XYPlot)jfreechart.getPlot(); //獲得 plot:XYPlot!!
          ??????? xyplot.setBackgroundPaint(Color.lightGray); //設定圖表數據顯示部分背景色
          ??????? xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D)); //設定坐標軸與圖表數據顯示部分距離
          ??????? xyplot.setDomainGridlinePaint(Color.white); //網格線顏色
          ??????? xyplot.setRangeGridlinePaint(Color.white);
          ??????? //獲得 renderer 注意這里是XYLineAndShapeRenderer !!
          ??????? XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)xyplot.getRenderer();
          ??????? xylineandshaperenderer.setShapesVisible(true); //數據點可見
          ??????? xylineandshaperenderer.setShapesFilled(true); //數據點被填充即不是空心點
          ??????? NumberAxis numberaxis = (NumberAxis)xyplot.getRangeAxis();
          ??????? numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
          ??????? return jfreechart;
          ??? }?????????????????????
          ?? 一些重要的方法:
          ??????? XYLineAndShapeRenderer xylineandshaperenderer = new XYLineAndShapeRenderer();
          ??????? xylineandshaperenderer.setSeriesLinesVisible(0, false); //第一個XYSeries數據點間連線不可見
          ??????? xylineandshaperenderer.setSeriesShapesVisible(1, false); //第二個XYSeries數據點不可見
          ??????? xyplot.setRenderer(xylineandshaperenderer);??
          ???????
          [b]五、時間序列圖[/b]
          ??? 時間序列圖和折線圖很相似,不同的是它在 domain軸的數據是時間而不是數字。 時間序列圖的dataset 是
          ??? XYDataset 接口,具體實現類是TimeSeriesCollection ,和上面類似,有TimeSeries 對象,它被添加入
          ??? TimeSeriesCollection 。??????????????????????????????????????????????????????????????????????????????
          ? 1、創建一個數據源(dataset):
          ??? private static XYDataset createDataset()
          ??? {
          ??????? TimeSeries timeseries = new TimeSeries("L&G European Index Trust",Month.class);
          ??????? timeseries.add(new Month(2, 2001), 181.8D);//這里用的是Month.class,同樣還有Day.class Year.class 等等
          ??????? timeseries.add(new Month(3, 2001), 167.3D);
          ??????? timeseries.add(new Month(4, 2001), 153.8D);
          ??????? timeseries.add(new Month(5, 2001), 167.6D);
          ??????? timeseries.add(new Month(6, 2001), 158.8D);
          ??????? timeseries.add(new Month(7, 2001), 148.3D);
          ??????? timeseries.add(new Month(8, 2001), 153.9D);
          ??????? timeseries.add(new Month(9, 2001), 142.7D);
          ??????? timeseries.add(new Month(10, 2001), 123.2D);
          ??????? timeseries.add(new Month(11, 2001), 131.8D);
          ??????? timeseries.add(new Month(12, 2001), 139.6D);
          ??????? timeseries.add(new Month(1, 2002), 142.9D);
          ??????? timeseries.add(new Month(2, 2002), 138.7D);
          ??????? timeseries.add(new Month(3, 2002), 137.3D);
          ??????? timeseries.add(new Month(4, 2002), 143.9D);
          ??????? timeseries.add(new Month(5, 2002), 139.8D);
          ??????? timeseries.add(new Month(6, 2002), 137D);
          ??????? timeseries.add(new Month(7, 2002), 132.8D);
          ???????
          ??????? TimeSeries timeseries1 = new TimeSeries("L&G UK Index Trust",Month.class);
          ??????? timeseries1.add(new Month(2, 2001), 129.6D);
          ??????? timeseries1.add(new Month(3, 2001), 123.2D);
          ??????? timeseries1.add(new Month(4, 2001), 117.2D);
          ??????? timeseries1.add(new Month(5, 2001), 124.1D);
          ??????? timeseries1.add(new Month(6, 2001), 122.6D);
          ??????? timeseries1.add(new Month(7, 2001), 119.2D);
          ??????? timeseries1.add(new Month(8, 2001), 116.5D);
          ??????? timeseries1.add(new Month(9, 2001), 112.7D);
          ??????? timeseries1.add(new Month(10, 2001), 101.5D);
          ??????? timeseries1.add(new Month(11, 2001), 106.1D);
          ??????? timeseries1.add(new Month(12, 2001), 110.3D);
          ??????? timeseries1.add(new Month(1, 2002), 111.7D);
          ??????? timeseries1.add(new Month(2, 2002), 111D);
          ??????? timeseries1.add(new Month(3, 2002), 109.6D);
          ??????? timeseries1.add(new Month(4, 2002), 113.2D);
          ??????? timeseries1.add(new Month(5, 2002), 111.6D);
          ??????? timeseries1.add(new Month(6, 2002), 108.8D);
          ??????? timeseries1.add(new Month(7, 2002), 101.6D);
          ??????? TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();
          ??????? timeseriescollection.addSeries(timeseries);
          ??????? timeseriescollection.addSeries(timeseries1);
          ??????? timeseriescollection.setDomainIsPointsInTime(true); //domain軸上的刻度點代表的是時間點而不是時間段
          ??????? return timeseriescollection;
          ??? }
          ?? 2、由ChartFactory? 產生 JFreeChart 對象
          ??? private static JFreeChart createChart(XYDataset xydataset)
          ??? {
          ??????? JFreeChart jfreechart = ChartFactory.createTimeSeriesChart("Legal & General Unit Trust Prices",
          ?????????????????????????????????????????????????????????????????? "Date",
          ?????????????????????????????????????????????????????????????????? "Price Per Unit",
          ?????????????????????????????????????????????????????????????????? xydataset,
          ?????????????????????????????????????????????????????????????????? true,
          ?????????????????????????????????????????????????????????????????? true,
          ?????????????????????????????????????????????????????????????????? false);
          ??????? jfreechart.setBackgroundPaint(Color.white);
          ??????? XYPlot xyplot = (XYPlot)jfreechart.getPlot(); //獲得 plot : XYPlot!!
          ??????? xyplot.setBackgroundPaint(Color.lightGray);
          ??????? xyplot.setDomainGridlinePaint(Color.white);
          ??????? xyplot.setRangeGridlinePaint(Color.white);
          ??????? xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));
          ??????? xyplot.setDomainCrosshairVisible(true);
          ??????? xyplot.setRangeCrosshairVisible(true);
          ??????? org.jfree.chart.renderer.xy.XYItemRenderer xyitemrenderer = xyplot.getRenderer();
          ??????? if(xyitemrenderer instanceof XYLineAndShapeRenderer)
          ??????? {
          ??????????? XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)xyitemrenderer;
          ??????????? xylineandshaperenderer.setDefaultShapesVisible(true); //數據點可見
          ??????????? xylineandshaperenderer.setDefaultShapesFilled(true);? //數據點是實心點
          ??????? }
          ??????? DateAxis dateaxis = (DateAxis)xyplot.getDomainAxis(); //對domain 軸上日期顯示格式定義
          ??????? dateaxis.setDateFormatOverride(new SimpleDateFormat("MMM-yyyy"));
          ??????? return jfreechart;
          ??? }?
          ?????? 一些重要的方法:
          ???? A、增加標記線:
          ??????? xyplot.addRangeMarker(new ValueMarker(550D)); //數值軸
          ??????? Quarter quarter = new Quarter(2, 2002);
          ??????? xyplot.addDomainMarker(new ValueMarker(quarter.getMiddleMillisecond()));? //時間軸
          ???? B、數據點的調整
          ??????? XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)xyplot.getRenderer();
          ??????? xylineandshaperenderer.setDefaultShapesVisible(true);? //數據點可見
          ??????? xylineandshaperenderer.setSeriesFillPaint(0, Color.red);? //數據點填充為紅色
          ??????? xylineandshaperenderer.setSeriesFillPaint(1, Color.white);? //數據點填充為白色
          ??????? xylineandshaperenderer.setUseFillPaint(true);??? //應用
          ???? C、平均值曲線
          ?????? 這個曲線有什么用呢?很簡單的例子,這里有一個以半年每天為單位的數據繪制的曲線,我們想看看以月為單位數據
          ?????? 的變化,這時就可以用到它了。
          ??????? TimeSeries timeseries = createEURTimeSeries();? //就是以半年每天為單位的數據
          ??????? TimeSeries timeseries1 = MovingAverage.createMovingAverage(timeseries,
          ?????????????????????????????????????????????????????????????????? "30 day moving average",
          ?????????????????????????????????????????????????????????????????? 30, //30天為一個周期
          ?????????????????????????????????????????????????????????????????? 30); //最開始的30天跳過
          ??????? TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();
          ??????? timeseriescollection.addSeries(timeseries);
          ??????? timeseriescollection.addSeries(timeseries1);
          ??????? return timeseriescollection;
          ????
          [b]六、總結一下[/b]
          ?????????????????????????? dataset????????????????????????? plot??????????????????? renderer??????????????????????
          ? 餅圖?????????? PieDataset(DefaultPieDataset)?????????? PiePlot??????????????????? ------
          ? 柱狀圖??? CatagoryDataset(DefaultCategoryDataset)??? CategoryPlot??????????????? BarRenderer
          ? 折線圖??? CatagoryDataset(DefaultCategoryDataset)??? CategoryPlot????????????? LineAndShapeRenderer
          ????????????????? XYDataset(XYSeriesCollection)?????????? XYPlot??????????????? XYLineAndShapeRenderer
          ? 時間序列圖???? XYDataset (TimeSeriesCollection)???????? XYPlot??????????????? XYLineAndShapeRenderer
          ? 這里只是一些常用的方法,具體還是看API ,主要的類總結如下:
          JFreeChart:生成圖表的中間存放類。

          CategoryDataSet:圖表的數據,主要包含行數據(String[] 類型),列數據(String[] 類型)和主數據??????????????????? (double[][]類型)。一般來說簡單的圖表主數據都是double[1][]類型的。
          ChartFactory: 工廠類,提供多種方法生成多達30多種圖表,用得比較多的是BarChart(柱狀圖),LineChart???????????? (折線圖),PieChart(餅狀圖)。工廠方法看起來比較統一:creatXXXChart(圖表標題,????????????? 行標題,列標題,主數據(CategoryDataSet))
          ChartUtities: 公用類,提供各種持久保存圖表數據的方法,比如saveChartAsJPEG(File,???????????????????????????? JFreeChart,width,height)
          其他還有一些渲染類,主要是用來美化圖表界面,調整和優化顯示風格等。
          總的來說還不錯,比jasperReport要簡單,上手很快,圖表效果也還不錯,用來做普通數據圖表足夠了



          [b]七、Item Lable[/b]
          ?? 這里以柱狀圖為例說明,具體來說就是在每個柱狀上顯示它的數據,具體有下面內容:
          ?? A、使 Item Lable 可見
          ?? B、調整 Item Lable 的顏色、字體等
          ?? C、調整 Item Lable 的位置
          ?? D、定制 Item Lable 的內容
          ?? 1、分配一個 Lable Generator 給 renderer
          ????? BarRenderer barrenderer = (BarRenderer)categoryplot.getRenderer();
          ????? GategoryLableGenerator generator =new StandardGategoryLableGenerator(
          ?????????? "{2}", new DecimalFormat("0.00")??? //調整顯示的數字和字符格式
          ????? );
          ????? barrenderer.setLableGenerator(generator);
          ?? 2、使 Item Lable 可見
          ????? barrenderer.setItemLableVisible(true);
          ?? 3、調整 Item Lable 的顏色、字體等
          ????? barrenderer.setItemLablePaint(Color.red);
          ????? barrenderer.setItemLableFont(new Font("SansSerif",Font.PLAIN,10));
          ?? 4、調整 Item Lable 的位置
          ????? 這里涉及到一個新的對象 ItemLablePosition , ItemLablePosition的構造函數有兩個或四個參數
          ????? public ItemLabelPosition(ItemLabelAnchor itemLabelAnchor,
          ???????????????????????? org.jfree.ui.TextAnchor textAnchor,
          ???????????????????????? org.jfree.ui.TextAnchor rotationAnchor,
          ???????????????????????? double angle)
          ????? itemLabelAnchor - Item Lable 的位置 (最重要的?。。?br />????? textAnchor - Item Lable里包含的正文相對于Item Lable 的位置
          ????? rotationAnchor - Item Lable里包含的正文旋轉的位置
          ????? angle - 旋轉的角度
          ????? ItemLabelPosition itemlabelposition = new ItemLabelPosition(ItemLabelAnchor.INSIDE12,
          ????????????????????????????????????????????????????? TextAnchor.CENTER_RIGHT,
          ????????????????????????????????????????????????????? TextAnchor.CENTER_RIGHT,
          ????????????????????????????????????????????????????? -1.57D);
          ????? barrenderer.setPositiveItemLabelPosition(itemlabelposition);
          ?? 這樣就可以每個柱狀上顯示它的數據了,當然可以定制 Item Lable 的內容,比如 Item Lable text 超過100的才
          ?? 顯示,這樣就需要定制自己的類,它要實現GategoryLableGenerator 接口,實現generateItemLable()方法。

          posts - 41, comments - 7, trackbacks - 0, articles - 0

          Copyright © weibogao

          主站蜘蛛池模板: 冀州市| 黄山市| 特克斯县| 红河县| 株洲市| 遵化市| 海阳市| 合阳县| 海城市| 梅州市| 通海县| 阿合奇县| 邓州市| 尼勒克县| 双城市| 图们市| 灌云县| 北海市| 颍上县| 淮北市| 安国市| 屯留县| 乌鲁木齐市| 巴彦淖尔市| 龙江县| 宝鸡市| 闸北区| 伊宁市| 平潭县| 宣威市| 大安市| 麻城市| 藁城市| 杭州市| 浪卡子县| 迁西县| 邹平县| 富平县| 镇安县| 岫岩| 怀安县|