<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    空間站

    北極心空

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

    一、jFreeChart產(chǎn)生圖形的流程
    ???創(chuàng)建一個數(shù)據(jù)源(dataset)來包含將要在圖形中顯示的數(shù)據(jù)?????>>創(chuàng)建一個?JFreeChart?對象來代表要顯示的圖形
    ?????????>>把圖形輸出
    ???重要的類和接口:
    ???org.jfree.data.general.Dataset??所有數(shù)據(jù)源類都要實(shí)現(xiàn)的接口
    ???org.jfree.chart.ChartFactory????由它來產(chǎn)生?JFreeChart?對象
    ???org.jfree.chart.JFreeChart????所有對圖形的調(diào)整都是通過它噢?。?br />???org.jfree.chart.plot.Plot????通過JFreeChart?對象獲得它,然后再通過它對圖形外部部分(例:坐標(biāo)軸)調(diào)整
    ????????????????????????????????注意:它有很多子類,一般都下嗍造型到它的子類!
    ???org.jfree.chart.renderer.AbstractRenderer?????通過JFreeChart?對象獲得它,然后再通過它對圖形內(nèi)部部分
    ????????????????????????????????????????????????(例:折線的類型)調(diào)整。同樣,針對不同類型的報表圖,它有
    ????????????????????????????????????????????????著不同的子類實(shí)現(xiàn)!在下面我們簡稱它為?Renderer
    ???下面我們結(jié)合不同類型的圖形來具體分析這個流程。
    ???
    二、餅圖
    ???餅圖的dataset?一般是用PieDataset?接口,具體實(shí)現(xiàn)類是?DefaultPieDataset
    ???1、創(chuàng)建一個數(shù)據(jù)源(dataset):
    ????private?static?PieDataset?createDataset()
    ????{
    ????????DefaultPieDataset?defaultpiedataset?=?new?DefaultPieDataset();?//注意是DefaultPieDataset?。?br />????????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??產(chǎn)生?JFreeChart?對象
    ????private?static?JFreeChart?createChart(PieDataset?piedataset)
    ????{
    ????????JFreeChart?jfreechart?=?ChartFactory.createPieChart("Pie?Chart?Demo?1",??//圖形標(biāo)題名稱
    ??????????????????????????????????????????????????????????????piedataset,???//?dataset
    ??????????????????????????????????????????????????????????????true,??????//?legend?
    ??????????????????????????????????????????????????????????????true,?????//?tooltips?
    ??????????????????????????????????????????????????????????????false);??//URLs?
    ????????PiePlot?pieplot?=?(PiePlot)jfreechart.getPlot();??//通過JFreeChart?對象獲得?plot:PiePlot??!
    ????????pieplot.setNoDataMessage("No?data?available");????//?沒有數(shù)據(jù)的時候顯示的內(nèi)容
    ????????return?jfreechart;
    ????}?
    ????一些重要的方法:
    ????pieplot.setExplodePercent(0,0.3D)?//把Lable?為"One"?的那一塊”挖“出來30%????
    ???3、輸出略??
    ???
    三、柱狀圖
    ???柱狀圖的dataset?一般是用CatagoryDataset接口(具體實(shí)現(xiàn)類是DefaultCategoryDataset),也會用?IntervalXYDataset?
    ???接口
    ???1、創(chuàng)建一個數(shù)據(jù)源(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??產(chǎn)生?JFreeChart?對象????
    ????private?static?JFreeChart?createChart(CategoryDataset?categorydataset)
    ????{
    ????????JFreeChart?jfreechart?=?ChartFactory.createBarChart("Bar?Chart?Demo",?//圖形標(biāo)題名稱
    ????????????????????????????????????????????????????????????"Category",//domain?軸?Lable?
    ?????????????????????????????????????????????????????????????????????????這里先簡單理解為橫坐標(biāo)Lable好了
    ????????????????????????????????????????????????????????????"Value",?//range?軸?Lable
    ???????????????????????????????????????????????????????????????????????這里也先簡單理解為縱坐標(biāo)Lable好了
    ????????????????????????????????????????????????????????????categorydataset,?//??dataset
    ????????????????????????????????????????????????????????????PlotOrientation.VERTICAL,?//垂直顯示
    ????????????????????????????????????????????????????????????true,?//?legend?
    ????????????????????????????????????????????????????????????true,??//?tooltips?
    ????????????????????????????????????????????????????????????false);?//URLs?
    ????????jfreechart.setBackgroundPaint(Color.white);???//設(shè)定背景色為白色
    ????????CategoryPlot?categoryplot?=?jfreechart.getCategoryPlot();?//獲得?plot:CategoryPlot!!
    ????????categoryplot.setBackgroundPaint(Color.lightGray);?//設(shè)定圖表數(shù)據(jù)顯示部分背景色
    ????????categoryplot.setDomainGridlinePaint(Color.white);?//橫坐標(biāo)網(wǎng)格線白色
    ????????categoryplot.setDomainGridlinesVisible(true);?//可見
    ????????categoryplot.setRangeGridlinePaint(Color.white);?//縱坐標(biāo)網(wǎng)格線白色
    ????????//下面兩行使縱坐標(biāo)的最小單位格為整數(shù)
    ????????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));???//設(shè)定特定顏色
    ????????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設(shè)定上面定義的顏色
    ????????barrenderer.setSeriesPaint(1,?gradientpaint1);?//給series2?Bar?設(shè)定上面定義的顏色
    ????????barrenderer.setSeriesPaint(2,?gradientpaint2);?//給series3?Bar?設(shè)定上面定義的顏色
    ????????CategoryAxis?categoryaxis?=?categoryplot.getDomainAxis();??//橫軸上的?Lable?45度傾斜
    ????????categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);????????
    ????????return?jfreechart;
    ????}??
    ????一些重要的方法:(增加一塊標(biāo)記)
    ????????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接口(具體實(shí)現(xiàn)類是DefaultCategoryDataset),XYDataset?接口?
    ???1、CatagoryDataset接口:?????????
    ???A、創(chuàng)建一個數(shù)據(jù)源(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??產(chǎn)生?JFreeChart?對象?????(與上面重復(fù)的部分就不再注釋)
    ????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?。?br />????????LineAndShapeRenderer?lineandshaperenderer?=?(LineAndShapeRenderer)categoryplot.getRenderer();
    ????????lineandshaperenderer.setShapesVisible(true);?//series?點(diǎn)(即數(shù)據(jù)點(diǎn))可見
    ????????lineandshaperenderer.setSeriesStroke(0,?new?BasicStroke(2.0F,?1,?1,?1.0F,?new?float[]?{
    ????????????10F,?6F
    ????????},?0.0F));?//定義series為"First"的(即series1)點(diǎn)之間的連線?,這里是虛線,默認(rèn)是直線
    ????????lineandshaperenderer.setSeriesStroke(1,?new?BasicStroke(2.0F,?1,?1,?1.0F,?new?float[]?{
    ????????????6F,?6F
    ????????},?0.0F));?//定義series為"Second"的(即series2)點(diǎn)之間的連線
    ????????lineandshaperenderer.setSeriesStroke(2,?new?BasicStroke(2.0F,?1,?1,?1.0F,?new?float[]?{
    ????????????2.0F,?6F
    ????????},?0.0F));?//定義series為"Third"的(即series3)點(diǎn)之間的連線
    ????????return?jfreechart;
    ????}?
    ????????一些重要的方法:
    ????????lineandshaperenderer.setLineVisible(true)??//series?點(diǎn)(即數(shù)據(jù)點(diǎn))間有連線可見
    ???2、XYDataset?接口:
    ???A、創(chuàng)建一個數(shù)據(jù)源(dataset):
    ????private?static?XYDataset?createDataset()
    ????{
    ????????XYSeries?xyseries?=?new?XYSeries("First");?//先產(chǎn)生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??產(chǎn)生?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);?//設(shè)定圖表數(shù)據(jù)顯示部分背景色
    ????????xyplot.setAxisOffset(new?RectangleInsets(5D,?5D,?5D,?5D));?//設(shè)定坐標(biāo)軸與圖表數(shù)據(jù)顯示部分距離
    ????????xyplot.setDomainGridlinePaint(Color.white);?//網(wǎng)格線顏色
    ????????xyplot.setRangeGridlinePaint(Color.white);
    ????????//獲得?renderer?注意這里是XYLineAndShapeRenderer?!!
    ????????XYLineAndShapeRenderer?xylineandshaperenderer?=?(XYLineAndShapeRenderer)xyplot.getRenderer();
    ????????xylineandshaperenderer.setShapesVisible(true);?//數(shù)據(jù)點(diǎn)可見
    ????????xylineandshaperenderer.setShapesFilled(true);?//數(shù)據(jù)點(diǎn)被填充即不是空心點(diǎn)
    ????????NumberAxis?numberaxis?=?(NumberAxis)xyplot.getRangeAxis();
    ????????numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
    ????????return?jfreechart;
    ????}??????????????????????
    ???一些重要的方法:
    ????????XYLineAndShapeRenderer?xylineandshaperenderer?=?new?XYLineAndShapeRenderer();
    ????????xylineandshaperenderer.setSeriesLinesVisible(0,?false);?//第一個XYSeries數(shù)據(jù)點(diǎn)間連線不可見
    ????????xylineandshaperenderer.setSeriesShapesVisible(1,?false);?//第二個XYSeries數(shù)據(jù)點(diǎn)不可見
    ????????xyplot.setRenderer(xylineandshaperenderer);???
    ????????
    五、時間序列圖
    ????時間序列圖和折線圖很相似,不同的是它在?domain軸的數(shù)據(jù)是時間而不是數(shù)字。?時間序列圖的dataset?是
    ????XYDataset?接口,具體實(shí)現(xiàn)類是TimeSeriesCollection?,和上面類似,有TimeSeries?對象,它被添加入
    ????TimeSeriesCollection?。???????????????????????????????????????????????????????????????????????????????
    ??1、創(chuàng)建一個數(shù)據(jù)源(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軸上的刻度點(diǎn)代表的是時間點(diǎn)而不是時間段
    ????????return?timeseriescollection;
    ????}
    ???2、由ChartFactory??產(chǎn)生?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);?//數(shù)據(jù)點(diǎn)可見
    ????????????xylineandshaperenderer.setDefaultShapesFilled(true);??//數(shù)據(jù)點(diǎn)是實(shí)心點(diǎn)
    ????????}
    ????????DateAxis?dateaxis?=?(DateAxis)xyplot.getDomainAxis();?//對domain?軸上日期顯示格式定義
    ????????dateaxis.setDateFormatOverride(new?SimpleDateFormat("MMM-yyyy"));
    ????????return?jfreechart;
    ????}??
    ???????一些重要的方法:
    ?????A、增加標(biāo)記線:?
    ????????xyplot.addRangeMarker(new?ValueMarker(550D));?//數(shù)值軸
    ????????Quarter?quarter?=?new?Quarter(2,?2002);
    ????????xyplot.addDomainMarker(new?ValueMarker(quarter.getMiddleMillisecond()));??//時間軸
    ?????B、數(shù)據(jù)點(diǎn)的調(diào)整
    ????????XYLineAndShapeRenderer?xylineandshaperenderer?=?(XYLineAndShapeRenderer)xyplot.getRenderer();
    ????????xylineandshaperenderer.setDefaultShapesVisible(true);??//數(shù)據(jù)點(diǎn)可見
    ????????xylineandshaperenderer.setSeriesFillPaint(0,?Color.red);??//數(shù)據(jù)點(diǎn)填充為紅色
    ????????xylineandshaperenderer.setSeriesFillPaint(1,?Color.white);??//數(shù)據(jù)點(diǎn)填充為白色
    ????????xylineandshaperenderer.setUseFillPaint(true);????//應(yīng)用
    ?????C、平均值曲線?
    ???????這個曲線有什么用呢?很簡單的例子,這里有一個以半年每天為單位的數(shù)據(jù)繪制的曲線,我們想看看以月為單位數(shù)據(jù)
    ???????的變化,這時就可以用到它了。?
    ????????TimeSeries?timeseries?=?createEURTimeSeries();??//就是以半年每天為單位的數(shù)據(jù)
    ????????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;?
    ?????
    六、總結(jié)一下
    ???????????????????????????dataset??????????????????????????plot????????????????????renderer???????????????????????
    ??餅圖???????????PieDataset(DefaultPieDataset)???????????PiePlot????????????????????------
    ??柱狀圖????CatagoryDataset(DefaultCategoryDataset)????CategoryPlot????????????????BarRenderer
    ??折線圖????CatagoryDataset(DefaultCategoryDataset)????CategoryPlot??????????????LineAndShapeRenderer
    ??????????????????XYDataset(XYSeriesCollection)???????????XYPlot????????????????XYLineAndShapeRenderer
    ??時間序列圖?????XYDataset?(TimeSeriesCollection)?????????XYPlot????????????????XYLineAndShapeRenderer
    七、Item?Lable?
    ???這里以柱狀圖為例說明,具體來說就是在每個柱狀上顯示它的數(shù)據(jù),具體有下面內(nèi)容:
    ???A、使?Item?Lable?可見
    ???B、調(diào)整?Item?Lable?的顏色、字體等
    ???C、調(diào)整?Item?Lable?的位置
    ???D、定制?Item?Lable?的內(nèi)容
    ???1、分配一個?Lable?Generator?給?renderer
    ??????BarRenderer?barrenderer?=?(BarRenderer)categoryplot.getRenderer();
    ??????GategoryLableGenerator?generator?=new?StandardGategoryLableGenerator(
    ???????????"{2}",?new?DecimalFormat("0.00")????//調(diào)整顯示的數(shù)字和字符格式
    ??????);
    ??????barrenderer.setLableGenerator(generator);
    ???2、使?Item?Lable?可見
    ??????barrenderer.setItemLableVisible(true);
    ???3、調(diào)整?Item?Lable?的顏色、字體等
    ??????barrenderer.setItemLablePaint(Color.red);
    ??????barrenderer.setItemLableFont(new?Font("SansSerif",Font.PLAIN,10));
    ???4、調(diào)整?Item?Lable?的位置
    ??????這里涉及到一個新的對象?ItemLablePosition?,?ItemLablePosition的構(gòu)造函數(shù)有兩個或四個參數(shù)
    ??????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里包含的正文旋轉(zhuǎn)的位置
    ??????angle?-?旋轉(zhuǎn)的角度
    ??????ItemLabelPosition?itemlabelposition?=?new?ItemLabelPosition(ItemLabelAnchor.INSIDE12,?
    ??????????????????????????????????????????????????????TextAnchor.CENTER_RIGHT,?
    ??????????????????????????????????????????????????????TextAnchor.CENTER_RIGHT,?
    ??????????????????????????????????????????????????????-1.57D);
    ??????barrenderer.setPositiveItemLabelPosition(itemlabelposition);?
    ???這樣就可以每個柱狀上顯示它的數(shù)據(jù)了,當(dāng)然可以定制?Item?Lable?的內(nèi)容,比如?Item?Lable?text?超過100的才
    ???顯示,這樣就需要定制自己的類,它要實(shí)現(xiàn)GategoryLableGenerator?接口,實(shí)現(xiàn)generateItemLable()方法。
    ???
    了解了jFreeChart?,現(xiàn)在要使用cewolf?。具體在web?中如何配置,就不說了。首先也是了解cewolf?工作的流程,然后對
    它的標(biāo)簽進(jìn)行說明.

    一、cewolf?產(chǎn)生圖形的流程
    ???創(chuàng)建一個數(shù)據(jù)源(dataset)來包含將要在圖形中顯示的數(shù)據(jù)?????>><cewolf:chart/>標(biāo)簽對圖形進(jìn)行調(diào)整
    ?????????>><cewolf:img/>標(biāo)簽把圖形輸出
    ?1、創(chuàng)建一個數(shù)據(jù)源(dataset)
    ???創(chuàng)建數(shù)據(jù)源基本上和上面一樣,所不同的是?cewolf?對其重新進(jìn)行了包裝,它提供了一個DatasetProducer?接口,你需要
    ???實(shí)現(xiàn)這一接口,下面是一個例子
    ??DatasetProducer?timeData?=?new?DatasetProducer()?{
    ????public?Object?produceDataset(Map?params)?{??//cewolf?對其重新進(jìn)行了包裝
    ??????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)?{?//默認(rèn)就好
    ??????return?false;
    ????}
    ??};
    ??pageContext.setAttribute("timeData",?timeData);?//產(chǎn)生完以后要把它放到頁面中保存以給?cewolf標(biāo)簽調(diào)用
    ?2、<cewolf:chart/>標(biāo)簽
    ??<cewolf:chart?id="timeChart"?????//這個id要唯一,給下邊<cewolf:img/>標(biāo)簽引用
    ????????????????title="TimeSeries"??//圖形的標(biāo)題
    ????????????????type="timeseries"???//圖形的類型?
    ????????????????xaxislabel="x-values"????//橫軸?Lable
    ????????????????yaxislabel="y-values">???//縱軸Lable
    ????<cewolf:colorpaint?color="#EEEEFF"/>??//圖形的背景色
    ????<cewolf:data>
    ????????<cewolf:producer?id="timeData"/>??//引用上面產(chǎn)生的數(shù)據(jù)
    ????</cewolf:data>
    ??</cewolf:chart>?
    ??一些說明:
    ??關(guān)于圖形的背景色,還有兩個選擇,分別是
    ????<cewolf:gradientpaint>???//產(chǎn)生色彩傾斜的背景
    ????????<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/>標(biāo)簽
    ???<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、進(jìn)一步調(diào)整
    ???看到上面的步驟,你可能會認(rèn)為用?cewolf?輸出圖形是如此的簡單,是這樣的,但看了最開始的?jFreeChart?對圖形
    ???的一些調(diào)整,你會想我如何調(diào)整呢?我不想用默認(rèn)值,我想輸出更復(fù)雜的圖形。很好,我是這樣做的:
    ???這里要介紹一個新的接口ChartPostProcessor??和一個標(biāo)簽<cewolf:chartpostprocessor/>
    ???我們要寫自己的類實(shí)現(xiàn)這個ChartPostProcessor?接口,然后再用標(biāo)簽<cewolf:chartpostprocessor/>調(diào)用我們所寫
    ???的類
    ??ChartPostProcessor?dataColor?=?new?ChartPostProcessor()?{
    ????public?void?processChart(Object?chart,?Map?params)?{??//這個接口就這一個方法
    ??????CategoryPlot?plot?=?(CategoryPlot)?((JFreeChart)?chart).getPlot();?//看到了什么???。Γ@得了plot!
    ?????????????????????????????????????????????????????????????????下面就可以通過plot?對圖形進(jìn)行調(diào)整??!??????????
    ??????plot.setAxisOffset(new?RectangleInsets(5D,?5D,?5D,?5D));??//一個實(shí)驗,坐標(biāo)軸與圖分離
    ??????for?(int?i?=?0;?i?<?params.size();?i++)?{???//這里的params?是通過標(biāo)簽<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">???//在這里?。?br />????????<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>??
    ?我們當(dāng)然也可以在實(shí)現(xiàn)ChartPostProcessor?接口的類里把一切都做好,然后這么用:
    ????<cewolf:chartpostprocessor?id="dataColor"/>???
    posted on 2006-12-25 15:04 蘆葦 閱讀(903) 評論(0)  編輯  收藏 所屬分類: JAVA 、其他
    主站蜘蛛池模板: 亚洲线精品一区二区三区 | 亚洲嫩模在线观看| 亚洲乱码无码永久不卡在线 | 在线观看免费高清视频| 成人午夜免费福利视频| 69天堂人成无码麻豆免费视频| 最近中文字幕2019高清免费| 91香蕉国产线在线观看免费| 久久九九兔免费精品6| 在线看片韩国免费人成视频| 国产三级在线观看免费| 午夜精品在线免费观看| 国产又黄又爽又刺激的免费网址| 免费jjzz在在线播放国产| 亚洲国产婷婷综合在线精品| 三上悠亚亚洲一区高清| 亚洲高清国产拍精品26U| 久久久久久亚洲Av无码精品专口| 亚洲精品国产情侣av在线| 国产成人精品亚洲2020| 亚洲AV无码一区二区三区网址| 羞羞漫画页面免费入口欢迎你 | 亚洲视频免费在线看| 一本天堂ⅴ无码亚洲道久久| 亚洲av午夜电影在线观看| 一级成人a做片免费| 久久久久免费看黄a级试看| 黄在线观看www免费看| 男女啪啪永久免费观看网站| 亚洲精品一级无码鲁丝片| 亚洲AV永久纯肉无码精品动漫 | 亚洲色精品88色婷婷七月丁香| 亚洲综合日韩中文字幕v在线| 99热亚洲色精品国产88| 色多多免费视频观看区一区| 国产免费阿v精品视频网址| 又粗又大又黑又长的免费视频| 国产网站免费观看| 国产亚洲精品资源在线26u| 亚洲国产中文在线视频| 美女视频黄a视频全免费网站一区|