空間站

          北極心空

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks
          在使用cewolf?之前,首先來熟悉一下jFreeChart?。這里分三部分來介紹?jFreeChart?。第一部分介紹jFreeChart產生
          圖形的流程及相關的重要的類;第二部分介紹四種常用的報表圖(餅圖、柱狀圖、折線圖、時間序列圖);第三部分
          介紹在圖形中增加Item?Lable?。?
          jFreeChart?的版本是jfreechart-1.0.0-pre2(1)
          cewolf?的最新版本是cewolf-0.12.0

          一、jFreeChart產生圖形的流程
          ???創建一個數據源(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
          ???下面我們結合不同類型的圖形來具體分析這個流程。
          ???
          二、餅圖
          ???餅圖的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、輸出略??
          ???
          三、柱狀圖
          ???柱狀圖的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!!
          ????????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);????
          ????????
          四、折線圖
          ???折線圖的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);???
          ????????
          五、時間序列圖
          ????時間序列圖和折線圖很相似,不同的是它在?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;?
          ?????
          六、總結一下
          ???????????????????????????dataset??????????????????????????plot????????????????????renderer???????????????????????
          ??餅圖???????????PieDataset(DefaultPieDataset)???????????PiePlot????????????????????------
          ??柱狀圖????CatagoryDataset(DefaultCategoryDataset)????CategoryPlot????????????????BarRenderer
          ??折線圖????CatagoryDataset(DefaultCategoryDataset)????CategoryPlot??????????????LineAndShapeRenderer
          ??????????????????XYDataset(XYSeriesCollection)???????????XYPlot????????????????XYLineAndShapeRenderer
          ??時間序列圖?????XYDataset?(TimeSeriesCollection)?????????XYPlot????????????????XYLineAndShapeRenderer
          七、Item?Lable?
          ???這里以柱狀圖為例說明,具體來說就是在每個柱狀上顯示它的數據,具體有下面內容:
          ???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?的位置?(最重要的!!)
          ??????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()方法。
          ???
          了解了jFreeChart?,現在要使用cewolf?。具體在web?中如何配置,就不說了。首先也是了解cewolf?工作的流程,然后對
          它的標簽進行說明.

          一、cewolf?產生圖形的流程
          ???創建一個數據源(dataset)來包含將要在圖形中顯示的數據?????>><cewolf:chart/>標簽對圖形進行調整
          ?????????>><cewolf:img/>標簽把圖形輸出
          ?1、創建一個數據源(dataset)
          ???創建數據源基本上和上面一樣,所不同的是?cewolf?對其重新進行了包裝,它提供了一個DatasetProducer?接口,你需要
          ???實現這一接口,下面是一個例子
          ??DatasetProducer?timeData?=?new?DatasetProducer()?{
          ????public?Object?produceDataset(Map?params)?{??//cewolf?對其重新進行了包裝
          ??????TimeSeries?ts?=?new?TimeSeries("Cewolf?Release?Schedule",?Month.class);//怎么樣?和上面一樣吧
          ??????ts.add(new?Month(7,?2002),?0.1);
          ??????ts.add(new?Month(8,?2002),?0.4);
          ??????ts.add(new?Month(9,?2002),?0.9);
          ??????ts.add(new?Month(10,?2002),?1.0);
          ??????return?new?TimeSeriesCollection(ts);
          ????}
          ????public?String?getProducerId()?{??//返回唯一的ID
          ??????return?"TimeDataProducer";
          ????}
          ????public?boolean?hasExpired(Map?params,?Date?since)?{?//默認就好
          ??????return?false;
          ????}
          ??};
          ??pageContext.setAttribute("timeData",?timeData);?//產生完以后要把它放到頁面中保存以給?cewolf標簽調用
          ?2、<cewolf:chart/>標簽
          ??<cewolf:chart?id="timeChart"?????//這個id要唯一,給下邊<cewolf:img/>標簽引用
          ????????????????title="TimeSeries"??//圖形的標題
          ????????????????type="timeseries"???//圖形的類型?
          ????????????????xaxislabel="x-values"????//橫軸?Lable
          ????????????????yaxislabel="y-values">???//縱軸Lable
          ????<cewolf:colorpaint?color="#EEEEFF"/>??//圖形的背景色
          ????<cewolf:data>
          ????????<cewolf:producer?id="timeData"/>??//引用上面產生的數據
          ????</cewolf:data>
          ??</cewolf:chart>?
          ??一些說明:
          ??關于圖形的背景色,還有兩個選擇,分別是
          ????<cewolf:gradientpaint>???//產生色彩傾斜的背景
          ????????<cewolf:point?x="0"?y="0"?color="#AAAAFFEE"?/>
          ????????<cewolf:point?x="300"?y="0"?color="#DDDDFF"?/>
          ????</cewolf:gradientpaint>
          ??和
          ????<cewolf:texturepaint?image="/img/bg.jpg"?width="60"?height="60"?/>?//加入背景圖案
          ?3、<cewolf:img/>標簽
          ???<cewolf:img?chartid="timeChart"???//就是上面那個?id
          ???????????????renderer="/cewolf"????//這個是必需的!web.xml?中有配置
          ???????????????width="300"?????????//寬
          ???????????????height="300"?/>??????//高
          ???還有一種圖形輸出方式:
          ??<img?src='<cewolf:imgurl?chartid="foobar"?renderer="/cewolf"?width="100"?height="100"/>'>
          ??很明顯,這種方式把圖形包含到?Html?的<img/>中
          ?4、進一步調整
          ???看到上面的步驟,你可能會認為用?cewolf?輸出圖形是如此的簡單,是這樣的,但看了最開始的?jFreeChart?對圖形
          ???的一些調整,你會想我如何調整呢?我不想用默認值,我想輸出更復雜的圖形。很好,我是這樣做的:
          ???這里要介紹一個新的接口ChartPostProcessor??和一個標簽<cewolf:chartpostprocessor/>
          ???我們要寫自己的類實現這個ChartPostProcessor?接口,然后再用標簽<cewolf:chartpostprocessor/>調用我們所寫
          ???的類
          ??ChartPostProcessor?dataColor?=?new?ChartPostProcessor()?{
          ????public?void?processChart(Object?chart,?Map?params)?{??//這個接口就這一個方法
          ??????CategoryPlot?plot?=?(CategoryPlot)?((JFreeChart)?chart).getPlot();?//看到了什么??!!對,獲得了plot!
          ?????????????????????????????????????????????????????????????????下面就可以通過plot?對圖形進行調整!!??????????
          ??????plot.setAxisOffset(new?RectangleInsets(5D,?5D,?5D,?5D));??//一個實驗,坐標軸與圖分離
          ??????for?(int?i?=?0;?i?<?params.size();?i++)?{???//這里的params?是通過標簽<cewolf:chartpostprocessor/>輸入的!
          ????????String?colorStr?=?(String)?params.get(String.valueOf(i));
          ????????plot.getRenderer().setSeriesPaint(i,?java.awt.Color.decode(colorStr));//看到?renderer了吧,又可以大
          ????????????????????????????????????????????????????????????????????????????????干一場了,嘿嘿!
          ??????}
          ????}
          ??};
          ??pageContext.setAttribute("dataColor",?dataColor);?//記得要放起來噢
          ??具體引用:
          <cewolf:chart?id="stackedHorizontalBar"?title="StackedHorizontalBar"?
          ??????????????type="stackedHorizontalBar"?xaxislabel="Fruit"?yaxislabel="favorite">
          ????<cewolf:data>
          ????????<cewolf:producer?id="categoryData"?/>
          ????</cewolf:data>
          ????<cewolf:chartpostprocessor?id="dataColor">???//在這里!!
          ????????<cewolf:param?name="0"?value='<%=?"#FFFFAA"?%>'/>
          ????????<cewolf:param?name="1"?value='<%=?"#AAFFAA"?%>'/>
          ????????<cewolf:param?name="2"?value='<%=?"#FFAAFF"?%>'/>
          ????????<cewolf:param?name="3"?value='<%=?"#FFAAAA"?%>'/>
          ????</cewolf:chartpostprocessor>
          </cewolf:chart>??
          ?我們當然也可以在實現ChartPostProcessor?接口的類里把一切都做好,然后這么用:
          ????<cewolf:chartpostprocessor?id="dataColor"/>???
          posted on 2006-12-25 15:04 蘆葦 閱讀(904) 評論(0)  編輯  收藏 所屬分類: JAVA其他
          主站蜘蛛池模板: 云南省| 静乐县| 四川省| 勃利县| 克拉玛依市| 漠河县| 武鸣县| 微博| 宜黄县| 大埔县| 习水县| 千阳县| 会东县| 阿图什市| 新源县| 龙陵县| 清水县| 老河口市| 浠水县| 柳河县| 新营市| 石嘴山市| 县级市| 彭阳县| 讷河市| 张家口市| 华蓥市| 顺平县| 泗水县| 牟定县| 柏乡县| 中阳县| 弋阳县| 中江县| 皋兰县| 东乌珠穆沁旗| 桦川县| 台州市| 柘荣县| 惠安县| 虹口区|