JavaExplore

          一切像霧像雨又像風(fēng)
          posts - 19, comments - 45, trackbacks - 0, articles - 0

          3 數(shù)據(jù)源處理

          JFreeChart 中的數(shù)據(jù)源是DataSet接口類(lèi)型。該接口有三個(gè)主要的子類(lèi)接口:CategoryDatasetPieDatasetSeriesDataset

          CategoryDataset 接口的實(shí)現(xiàn)類(lèi)基本上都維護(hù)了一個(gè)三元組<value,row,col>的列表結(jié)構(gòu)。不同的實(shí)現(xiàn)類(lèi)中value 的類(lèi)型不相同。<row,col>唯一確定一個(gè)三元組。CategoryDataset的實(shí)現(xiàn)類(lèi)提供對(duì)這個(gè)三元組的增刪改查操作。

          PieDataset 接口有兩個(gè)主要的實(shí)現(xiàn)類(lèi):CategoryToPieDataset DefaultPieDatasetPieDataset接口的實(shí)現(xiàn)類(lèi)基本上都維護(hù)了一個(gè)二元組<key,value>的列表結(jié)構(gòu)。Key唯一確定一個(gè)二元組。CategoryDataset的實(shí)現(xiàn)類(lèi)提供對(duì)這個(gè)二元組的增刪改查操作。CategoryToPieDataset中的二元結(jié)構(gòu)列表通過(guò)對(duì)CategoryDataset類(lèi)型的對(duì)象指定行或者列轉(zhuǎn)化過(guò)來(lái)。DefaultPieDataset直接維護(hù)一個(gè)二元結(jié)構(gòu)列表。

          SeriesDataset 接口的實(shí)現(xiàn)類(lèi)基本上都維護(hù)了一種特定數(shù)據(jù)結(jié)構(gòu)的列表。以TimeSeriesCollection為例。它維護(hù)一個(gè)TimeSeries對(duì)象列表,提供對(duì)該列表的增刪查操作。每個(gè)TimeSeries對(duì)象維護(hù)一個(gè)<time,value>列表,提供對(duì)該列表的增刪改查操作。

          JFreeChart 中對(duì)常見(jiàn)圖形的處理

          ?????? JFreeChart 并不存在多個(gè)不同的類(lèi)來(lái)生成不同的圖形。所有的圖形都是具體類(lèi) JFreeChart 的實(shí)例化對(duì)象,初始化 JFreeChart 對(duì)象的時(shí)候通過(guò)指定不同的 Plot 實(shí)現(xiàn)類(lèi)就可以顯示出不同的圖形。不同的 Plot 實(shí)現(xiàn)類(lèi)具有不同的 Renderer 對(duì)象、 Axis 對(duì)象、 Dataset 對(duì)象。

          ?????? JFreeChart 提供工廠(chǎng)類(lèi) ChartFactory 方便使用者生成各種不同的圖形。 ChartFactory 類(lèi)的各個(gè)工廠(chǎng)方法中實(shí)現(xiàn)對(duì)具體 Plot 的指定以及對(duì)類(lèi) JFreeChart 構(gòu)造函數(shù)的調(diào)用。

          ?????? 下面以常用圖形說(shuō)一下常用的使用流程(大部分的操作講的并不全面,比如 JFreeChart 可能提供了很多增加、修改數(shù)據(jù)的方式,下文中可能只列舉一種)。

          1 柱狀圖

          1 )平面柱狀圖

          ?????? 生成柱狀圖操作:

          ?????? JFreeChart chart = ChartFactory.createBarChart(

          ?????? ??????? ?????? String title,???????????????? // 圖標(biāo)題

          ??????????????? String categoryAxisLabel,???? //x 軸標(biāo)題

          ??????????????? String valueAxisLabel,?????? //y 軸標(biāo)題

          ??????????????? CategoryDataset dataset,????? // 數(shù)據(jù)源

          ??????????????? PlotOrientation orientation,??? // 顯示方向

          ???????????????? boolean legend,???????????? // 是否顯示圖例

          ???????????????? boolean tooltips,??????????? // 是否顯示 tooltip

          ???????????????? boolean urls) ???????????? // 是否指定 url

          平面柱狀圖的 Plot 對(duì)象是 CategoryPlot 類(lèi)型。 CategoryPlot 對(duì)象的 x 軸是 CategoryAxis 對(duì)象, y 軸是 NumberAxis 對(duì)象,繪制單元是 BarRenderer 對(duì)象,數(shù)據(jù)源是 CategoryDataset 對(duì)象。

          ?

          獲取 CategoryPlot 對(duì)象操作為:

          CategoryPlot plot = ( CategoryPlot ) chart.getPlot(); 或者

          CategoryPlot plot = chart.getCategoryPlot();

          獲取繪制單元操作:

          ?????? BarRenderer renderer = (BarRenderer) plot.getRenderer();

          獲取 x 軸的操作:

          CategoryAxis xAxis = ( CategoryAxis ) plot.getDomainAxis();

          獲取 y 軸操作:

          NumberAxis yAxis = (NumberAxis) plot.getRangeAxis();

          獲取數(shù)據(jù)源:

          CategoryDataset dataset=plot.getDataset();

          ?

          ?????? 柱狀圖可以接受一切 CategoryDataset 類(lèi)型的數(shù)據(jù)源,下面講解一下常用的 CategoryDataset 類(lèi)型 DefaultCategoryDataset 的使用方式

          實(shí)例化:

          DefaultCategoryDataset dataset = new DefaultCategoryDataset();

          增加數(shù)據(jù)

          dataset .addValue(double value, Comparable rowKey, Comparable columnKey) ;

          刪除數(shù)據(jù):

          ?????? dataset .removeValue(Comparable rowKey, Comparable columnKey);

          ?????? 或者

          ?????? dataset. removeColumn(int columnIndex);

          ?????? 或者

          ?????? dataset. removeColumn(Comparable columnKey);

          ?????? 對(duì)行同樣有上述兩種刪除方式,不在列舉。

          修改數(shù)據(jù):

          ?????? dataset. setValue(double value, Comparable rowKey, Comparable columnKey);

          查詢(xún)數(shù)據(jù) :

          對(duì) plot 對(duì)象、繪制單元、 x 軸、 y 軸的顯示特性修改不再一一介紹。

          2 3D 柱狀圖

          ?????? 對(duì)應(yīng)的工廠(chǎng)方法為 createBarChart3D ,該方法的參數(shù)與平面柱狀圖相同。 3D 柱狀圖的 Plot 對(duì)象是 CategoryPlot 類(lèi)型。 CategoryPlot 對(duì)象的 x 軸是 CategoryAxis3D 對(duì)象, y 軸是 NumberAxis3D 對(duì)象,繪制單元是 BarRenderer3D 對(duì)象,數(shù)據(jù)源是 CategoryDataset 對(duì)象。

          ?????? 具體使用以及操作與平面柱狀圖雷同,不在詳述。

          2 餅狀圖

          (1) 平面餅狀圖

          生成平面餅狀圖:

          JFreeChart chart = ChartFactory. createPieChart(String title, // 圖標(biāo)題

          ???????????????????????? ?PieDataset dataset, ????? // 數(shù)據(jù)源

          ???????????????????????? ?boolean legend, ????????// 是否顯示圖例

          ???????????????????????? ?boolean tooltips,? ???????// 是否顯示tooltip

          ???????????????????????? ?boolean urls) ???????? // 是否指定url

          平面餅狀圖的Plot對(duì)象是PiePlot類(lèi)型。PiePlot對(duì)象沒(méi)有x軸對(duì)象、y軸對(duì)象、繪制單元對(duì)象,數(shù)據(jù)源是PieDataset對(duì)象。

          ?

          獲取PiePlot對(duì)象操作為:

          PiePlot plot = (PiePlot) chart.getPlot();

          獲取數(shù)據(jù)源:

          PieDataset dataset= plot .getDataset();

          ?

          餅狀圖可以接受一切 PieDataset 類(lèi)型的數(shù)據(jù)源,下面講解一下常用的 PieDataset 類(lèi)型 DefaultPieDataset 的使用方式

          實(shí)例化:

          ??? DefaultPieDataset dataset = new DefaultPieDataset();

          增加修改操作:

          ??? dataset. setValue(Comparable key, double value);

          刪除操作:

          ??? dataset. remove(Comparable key);

          查詢(xún)操作:

          ??? dataset. getKey(int item);

          或者

          dataset. getValue(int item);

          ?

          (1)3D 餅狀圖

          ?????? 對(duì)應(yīng)的工廠(chǎng)方法為 createPieChart3D ,參數(shù)與平面餅狀圖相同。與平面餅狀圖的差別在于 Plot 對(duì)象是PiePlot3D類(lèi)型 ,不再詳述。

          3 多重餅狀圖

          1 )多重平面餅狀圖

          生成多重平面餅狀圖:

          ?????? JFreeChart chart = ChartFactory. createMultiplePieChart

          (String title,?????????????? // 圖標(biāo)題

          ??????????????????????? CategoryDataset dataset,???? // 數(shù)據(jù)源

          ??????????????????????? TableOrder order,?????? // 指定提取數(shù)據(jù)的方式(按行或者按列)

          ??????????????????????? boolean legend,??????????? // 是否顯示圖例

          ??????????????????????? boolean tooltips,??????????? // 是否顯示 tooltip

          ??????????????????????? boolean urls)?? ?????????? // 是否指定 url

          多重平面餅狀圖的 Plot 對(duì)象是 MultiplePiePlot 類(lèi)型。 MultiplePiePlot 對(duì)象沒(méi)有 x 軸對(duì)象、 y 軸對(duì)象、繪制單元對(duì)象,數(shù)據(jù)源是 CategoryDataset 對(duì)象。 MultiplePiePlot 對(duì)象中可以含有多個(gè)子 JFreeChart 對(duì)象,子 JFreeChart 對(duì)象是上面講過(guò)的餅狀圖對(duì)象。

          ?

          獲取 MultiplePiePlot 對(duì)象操作為:

          MultiplePiePlot plotMain = (MultiplePiePlot) chart.getPlot();

          獲取子 JFreeChart 的操作為:

          ?????? JFreeChart childChart=plotMain.getPieChart();

          獲取數(shù)據(jù)源:

          CategoryDataset dataset= plotMain .getDataset();

          2 )多重 3D 餅狀圖

          ?????? 對(duì)應(yīng)的工廠(chǎng)方法為 createMultiplePieChart3D ,該方法的參數(shù)與 多重平面餅狀圖 相同。 多重 3D 餅狀圖的 Plot 對(duì)象是 MultiplePiePlot 類(lèi)型。 MultiplePiePlot 對(duì)象中可以含有多個(gè)子 JFreeChart 對(duì)象,子 JFreeChart 對(duì)象是上面講過(guò)的 3D 餅狀圖對(duì)象。

          4 線(xiàn)圖

          1 )平面線(xiàn)圖

          ?????? 生成平面線(xiàn)圖:

          ?????? JFreeChart chart = ChartFactory. createLineChart(String title,? // 圖標(biāo)題

          ???????????????????????? String categoryAxisLabel,???????? //x 軸標(biāo)題

          ???????????????????????? String valueAxisLabel,??????????? //y 軸標(biāo)題

          ???????????????????????? CategoryDataset dataset,?????????? // 數(shù)據(jù)源

          ???????????????????????? PlotOrientation orientation,???????? // 顯示方向

          ???????????????????????? boolean legend,???????????????? // 是否顯示圖例

          ???????????????????????? boolean tooltips,???????????????? // 是否顯示 tooltip

          ???????????????????????? boolean urls);????????????????? // 是否指定 url

          平面線(xiàn)圖除了的 Plot 對(duì)象中繪制單元對(duì)象是 LineAndShapeRenderer 對(duì)象,其他一切組成對(duì)象與平面柱狀圖相同。

          獲取 Renderer 操作:

          LineAndShapeRenderer renderer=(LineAndShapeRenderer) plot.getRenderer();

          其他參考平面柱狀圖。

          2 3D 線(xiàn)圖

          對(duì)應(yīng)工廠(chǎng)方法為 createLineChart3D ,參數(shù)與 createLineChart 相同。 3D 線(xiàn)圖的組成對(duì)象除了繪制單元對(duì)象是 LineAndShapeRenderer3D 對(duì)象,其他一切組成對(duì)象與 3D 柱狀圖相同。

          5 時(shí)序圖

          生成時(shí)序圖:

          ?????? JFreeChart chart = ChartFactory.createTimeSeriesChart(

          ????????????? String title,??? // 圖標(biāo)題

          ???????????????? String timeAxisLabel,?? //x 軸標(biāo)題

          ???????????????? String valueAxisLabel,? //y 軸標(biāo)題

          ??????? ?????????XYDataset dataset,?????? // 數(shù)據(jù)源

          ???????????????? boolean legend,????????? // 是否顯示圖例

          ???????????????? boolean tooltips,??????? // 是否顯示 tooltip

          ???????????????? boolean urls);?????????? // 是否指定 url

          時(shí)序圖的 Plot 對(duì)象是 XYPlot 類(lèi)型。 XYPlot 對(duì)象的 x 軸是 DateAxis 對(duì)象, y 軸是 NumberAxis 對(duì)象,繪制單元是 XYLineAndShapeRenderer 對(duì)象,數(shù)據(jù)源是 XYDataset 對(duì)象。

          Plot 對(duì)象的獲取操作:

          ?????? XYPlot plot = (XYPlot) chart.getPlot();

          X 軸對(duì)象的獲取操作:

          ?????? DateAxis xAxis = (DateAxis) plot.getDomainAxis();

          Y 軸對(duì)象的獲取操作:

          ?????? NumberAxis yAxis =(NumberAxis) plot.getRangeAxis();

          Renderer 對(duì)象的獲取操作:

          ?????? XYItemRenderer renderer= plot.getRenderer();

          ?

          時(shí)序圖可以接受一切 XYDataset 類(lèi)型的數(shù)據(jù)源,下面講解一下常用的 XYDataset 類(lèi)型 TimeSeriesCollection 的使用方式。

          實(shí)例化:

          ?????? TimeSeriesCollection dataset=new TimeSeriesCollection();

          添加數(shù)據(jù)操作:

          ?????? dataset. addSeries(TimeSeries); // 后面講解 TimeSeries 對(duì)象

          刪除數(shù)據(jù)操作:

          ?????? dataset. removeSeries(int index);

          查詢(xún)數(shù)據(jù)操作 :

          ?????? dataset. getSeries(int series);

          ?

          TimeSeries 對(duì)象操作

          實(shí)例化:

          ?????? TimeSeries ts=TimeSeries(String name, Class timePeriodClass);

          增加數(shù)據(jù)操作:

          ?????? ts. add(RegularTimePeriod period, double value);?

          刪除數(shù)據(jù)操作:

          ?????? ts. delete(RegularTimePeriod period);???

          修改數(shù)據(jù)操作:

          ?????? ts. update(RegularTimePeriod period, Number value);

          查詢(xún)數(shù)據(jù)操作:

          ?????? ts. getValue(RegularTimePeriod period);

          類(lèi) RegularTimePeriod JFreeChart 提供的時(shí)間模板類(lèi),它有很多具體的時(shí)間類(lèi),比如: Minute Second Hour Day…… 等,不再詳述。

          Feedback

          # re: 【原創(chuàng)】深入探究JFreeChart(2)   回復(fù)  更多評(píng)論   

          2006-09-13 08:50 by 陳琪
          看了你的文章,讓我對(duì)jfreechart更了解了,確實(shí)是入門(mén)的知識(shí)

          # re: 【原創(chuàng)】深入探究JFreeChart(2)   回復(fù)  更多評(píng)論   

          2006-09-14 15:08 by 譚俊
          謝謝,受益非淺,期待續(xù)篇

          # re: 【原創(chuàng)】深入探究JFreeChart(2)   回復(fù)  更多評(píng)論   

          2006-09-14 18:19 by 冰川
          恩,不錯(cuò)!

          # re: 【原創(chuàng)】深入探究JFreeChart(2)   回復(fù)  更多評(píng)論   

          2006-09-18 16:28 by 非注冊(cè)用戶(hù)11
          thanks a lot....

          # re: 【原創(chuàng)】深入探究JFreeChart(2)   回復(fù)  更多評(píng)論   

          2006-11-13 15:42 by kaui
          specital thank

          # re: 【原創(chuàng)】深入探究JFreeChart(2)   回復(fù)  更多評(píng)論   

          2007-09-11 10:37 by aaa
          有待繼續(xù)
          不錯(cuò)!

          # re: 【原創(chuàng)】深入探究JFreeChart(2)   回復(fù)  更多評(píng)論   

          2007-09-13 10:35 by chxmlmn
          對(duì)入門(mén)的人的幫助非常的大,謝謝樓主了。希望樓主繼續(xù)共享一些這方面知識(shí)。

          # re: 【原創(chuàng)】深入探究JFreeChart(2) [未登錄](méi)  回復(fù)  更多評(píng)論   

          2007-09-13 22:54 by javaexplore
          很高興對(duì)大家有幫助 這是以前預(yù)研圖象顯示的時(shí)候?qū)懙?這是和具體項(xiàng)目無(wú)關(guān)的一部分 供大家分享。有關(guān)jfreechart已經(jīng)不需要再繼續(xù)介紹了,往后就需要大家拿jfreechart的api手冊(cè)查了,沒(méi)有的話(huà),拿到源碼javadoc生成就可以。jfreechart抽象的很好,看好了我寫(xiě)的第一篇,需要什么再去api手冊(cè)里查就可以了。

          # re: 【原創(chuàng)】深入探究JFreeChart(2)   回復(fù)  更多評(píng)論   

          2008-05-07 16:36 by chen
          謝謝,頂頂!!!!

          # re: 【原創(chuàng)】深入探究JFreeChart(2)   回復(fù)  更多評(píng)論   

          2008-12-02 15:59 by 鮑明禮
          謝謝。。。

          # re: 【原創(chuàng)】深入探究JFreeChart(2) [未登錄](méi)  回復(fù)  更多評(píng)論   

          2009-02-05 13:32 by OK
          謝謝很好的Jfreechart介紹

          # re: 【原創(chuàng)】深入探究JFreeChart(2)   回復(fù)  更多評(píng)論   

          2009-07-17 10:32 by song_27149
          你的文章幫了我大忙了,謝謝!收藏了!

          # re: 【原創(chuàng)】深入探究JFreeChart(2)   回復(fù)  更多評(píng)論   

          2010-06-29 17:31 by 淘寶網(wǎng)
          JFreeChart 并不存在多個(gè)不同的類(lèi)來(lái)生成不同的圖形。所有的圖形都是具體類(lèi) JFreeChart 的實(shí)例化對(duì)象,初始化 JFreeChart 對(duì)象的時(shí)候通過(guò)指定不同的 Plot 實(shí)現(xiàn)類(lèi)就可以顯示出不同的圖形。不同的 Plot 實(shí)現(xiàn)類(lèi)具有不同的 Renderer 對(duì)象、 Axis 對(duì)象、 Dataset 對(duì)象。

          # re: 【原創(chuàng)】深入探究JFreeChart(2)   回復(fù)  更多評(píng)論   

          2011-07-16 14:29 by zhaoxy
          樓主,急求一個(gè)問(wèn)題的解答,還望拔亢賜教。
          我用ChartFactory.createStackedBarChart3D生成了一個(gè)堆疊的柱圖效果,希望其中每一個(gè)色塊的顏色都可以自己配置。不是每個(gè)系列的柱圖,而是所有都能自己配置,不知可以用什么方法?

          # re: 【原創(chuàng)】深入探究JFreeChart(2)   回復(fù)  更多評(píng)論   

          2012-03-15 14:34 by hel
          請(qǐng)問(wèn)能否制作出折線(xiàn)圖突出其中的一個(gè)折點(diǎn)呢,

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 鄄城县| 灌阳县| 徐水县| 巴彦县| 深泽县| 阳新县| 高陵县| 敖汉旗| 车致| 泾川县| 正安县| 南召县| 肇东市| 萍乡市| 孟州市| 杨浦区| 佛坪县| 江陵县| 乐东| 武鸣县| 高淳县| 宝鸡市| 阿拉善右旗| 象山县| 平武县| 西乌| 曲阜市| 哈尔滨市| 马龙县| 忻州市| 德安县| 噶尔县| 白城市| 扎鲁特旗| 南昌市| 南汇区| 襄垣县| 沙河市| 景洪市| 璧山县| 阜阳市|