3
數(shù)據(jù)源處理
JFreeChart
中的數(shù)據(jù)源是DataSet接口類型。該接口有三個主要的子類接口:CategoryDataset、PieDataset、SeriesDataset
CategoryDataset
接口的實現(xiàn)類基本上都維護了一個三元組<value,row,col>的列表結構。不同的實現(xiàn)類中value 的類型不相同。<row,col>唯一確定一個三元組。CategoryDataset的實現(xiàn)類提供對這個三元組的增刪改查操作。
PieDataset
接口有兩個主要的實現(xiàn)類:CategoryToPieDataset 、DefaultPieDataset。PieDataset接口的實現(xiàn)類基本上都維護了一個二元組<key,value>的列表結構。Key唯一確定一個二元組。CategoryDataset的實現(xiàn)類提供對這個二元組的增刪改查操作。CategoryToPieDataset中的二元結構列表通過對CategoryDataset類型的對象指定行或者列轉化過來。DefaultPieDataset直接維護一個二元結構列表。
SeriesDataset
接口的實現(xiàn)類基本上都維護了一種特定數(shù)據(jù)結構的列表。以TimeSeriesCollection為例。它維護一個TimeSeries對象列表,提供對該列表的增刪查操作。每個TimeSeries對象維護一個<time,value>列表,提供對該列表的增刪改查操作。
三
JFreeChart
中對常見圖形的處理
?????? JFreeChart
并不存在多個不同的類來生成不同的圖形。所有的圖形都是具體類
JFreeChart
的實例化對象,初始化
JFreeChart
對象的時候通過指定不同的
Plot
實現(xiàn)類就可以顯示出不同的圖形。不同的
Plot
實現(xiàn)類具有不同的
Renderer
對象、
Axis
對象、
Dataset
對象。
?????? JFreeChart
提供工廠類
ChartFactory
方便使用者生成各種不同的圖形。
ChartFactory
類的各個工廠方法中實現(xiàn)對具體
Plot
的指定以及對類
JFreeChart
構造函數(shù)的調用。
??????
下面以常用圖形說一下常用的使用流程(大部分的操作講的并不全面,比如
JFreeChart
可能提供了很多增加、修改數(shù)據(jù)的方式,下文中可能只列舉一種)。
1
柱狀圖
(
1
)平面柱狀圖
??????
生成柱狀圖操作:
?????? JFreeChart chart = ChartFactory.createBarChart(
??????
???????
?????? String title,???????????????? //
圖標題
??????????????? String categoryAxisLabel,???? //x
軸標題
??????????????? String valueAxisLabel,?????? //y
軸標題
??????????????? CategoryDataset dataset,????? //
數(shù)據(jù)源
??????????????? PlotOrientation orientation,??? //
顯示方向
???????????????? boolean legend,???????????? //
是否顯示圖例
???????????????? boolean tooltips,??????????? //
是否顯示
tooltip
???????????????? boolean urls)
;
???????????? //
是否指定
url
平面柱狀圖的
Plot
對象是
CategoryPlot
類型。
CategoryPlot
對象的
x
軸是
CategoryAxis
對象,
y
軸是
NumberAxis
對象,繪制單元是
BarRenderer
對象,數(shù)據(jù)源是
CategoryDataset
對象。
?
獲取
CategoryPlot
對象操作為:
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
類型的數(shù)據(jù)源,下面講解一下常用的
CategoryDataset
類型
DefaultCategoryDataset
的使用方式
實例化:
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);
??????
對行同樣有上述兩種刪除方式,不在列舉。
修改數(shù)據(jù):
?????? dataset.
setValue(double value, Comparable rowKey, Comparable columnKey);
查詢數(shù)據(jù)
:
對
plot
對象、繪制單元、
x
軸、
y
軸的顯示特性修改不再一一介紹。
(
2
)
3D
柱狀圖
??????
對應的工廠方法為
createBarChart3D
,該方法的參數(shù)與平面柱狀圖相同。
3D
柱狀圖的
Plot
對象是
CategoryPlot
類型。
CategoryPlot
對象的
x
軸是
CategoryAxis3D
對象,
y
軸是
NumberAxis3D
對象,繪制單元是
BarRenderer3D
對象,數(shù)據(jù)源是
CategoryDataset
對象。
??????
具體使用以及操作與平面柱狀圖雷同,不在詳述。
2
餅狀圖
(1)
平面餅狀圖
生成平面餅狀圖:
JFreeChart chart = ChartFactory. createPieChart(String title,
//
圖標題
????????????????????????
?PieDataset dataset,
????? //
數(shù)據(jù)源
????????????????????????
?boolean legend,
????????//
是否顯示圖例
????????????????????????
?boolean tooltips,?
???????//
是否顯示tooltip
????????????????????????
?boolean urls)
;
???????? //
是否指定url
平面餅狀圖的Plot對象是PiePlot類型。PiePlot對象沒有x軸對象、y軸對象、繪制單元對象,數(shù)據(jù)源是PieDataset對象。
?
獲取PiePlot對象操作為:
PiePlot plot = (PiePlot) chart.getPlot();
獲取數(shù)據(jù)源:
PieDataset dataset=
plot
.getDataset();
?
餅狀圖可以接受一切
PieDataset
類型的數(shù)據(jù)源,下面講解一下常用的
PieDataset
類型
DefaultPieDataset
的使用方式
實例化:
???
DefaultPieDataset dataset = new DefaultPieDataset();
增加修改操作:
???
dataset. setValue(Comparable key, double value);
刪除操作:
???
dataset. remove(Comparable key);
查詢操作:
???
dataset.
getKey(int item);
或者
dataset.
getValue(int item);
?
(1)3D
餅狀圖
??????
對應的工廠方法為
createPieChart3D
,參數(shù)與平面餅狀圖相同。與平面餅狀圖的差別在于
Plot
對象是PiePlot3D類型
,不再詳述。
3
多重餅狀圖
(
1
)多重平面餅狀圖
生成多重平面餅狀圖:
?????? JFreeChart chart = ChartFactory. createMultiplePieChart
(String title,?????????????? //
圖標題
??????????????????????? CategoryDataset dataset,???? //
數(shù)據(jù)源
??????????????????????? TableOrder order,?????? //
指定提取數(shù)據(jù)的方式(按行或者按列)
??????????????????????? boolean legend,??????????? //
是否顯示圖例
??????????????????????? boolean tooltips,??????????? //
是否顯示
tooltip
??????????????????????? boolean urls)??
;
?????????? //
是否指定
url
多重平面餅狀圖的
Plot
對象是
MultiplePiePlot
類型。
MultiplePiePlot
對象沒有
x
軸對象、
y
軸對象、繪制單元對象,數(shù)據(jù)源是
CategoryDataset
對象。
MultiplePiePlot
對象中可以含有多個子
JFreeChart
對象,子
JFreeChart
對象是上面講過的餅狀圖對象。
?
獲取
MultiplePiePlot
對象操作為:
MultiplePiePlot plotMain = (MultiplePiePlot) chart.getPlot();
獲取子
JFreeChart
的操作為:
?????? JFreeChart childChart=plotMain.getPieChart();
獲取數(shù)據(jù)源:
CategoryDataset dataset=
plotMain
.getDataset();
(
2
)多重
3D
餅狀圖
??????
對應的工廠方法為
createMultiplePieChart3D
,該方法的參數(shù)與
多重平面餅狀圖
相同。
多重
3D
餅狀圖的
Plot
對象是
MultiplePiePlot
類型。
MultiplePiePlot
對象中可以含有多個子
JFreeChart
對象,子
JFreeChart
對象是上面講過的
3D
餅狀圖對象。
4
線圖
(
1
)平面線圖
??????
生成平面線圖:
?????? JFreeChart chart = ChartFactory. createLineChart(String title,? //
圖標題
???????????????????????? String categoryAxisLabel,???????? //x
軸標題
???????????????????????? String valueAxisLabel,??????????? //y
軸標題
???????????????????????? CategoryDataset dataset,?????????? //
數(shù)據(jù)源
???????????????????????? PlotOrientation orientation,???????? //
顯示方向
???????????????????????? boolean legend,???????????????? //
是否顯示圖例
???????????????????????? boolean tooltips,???????????????? //
是否顯示
tooltip
???????????????????????? boolean urls);????????????????? //
是否指定
url
平面線圖除了的
Plot
對象中繪制單元對象是
LineAndShapeRenderer
對象,其他一切組成對象與平面柱狀圖相同。
獲取
Renderer
操作:
LineAndShapeRenderer renderer=(LineAndShapeRenderer) plot.getRenderer();
其他參考平面柱狀圖。
(
2
)
3D
線圖
對應工廠方法為
createLineChart3D
,參數(shù)與
createLineChart
相同。
3D
線圖的組成對象除了繪制單元對象是
LineAndShapeRenderer3D
對象,其他一切組成對象與
3D
柱狀圖相同。
5
時序圖
生成時序圖:
??????
JFreeChart chart = ChartFactory.createTimeSeriesChart(
????????????? String title,??? //
圖標題
???????????????? String timeAxisLabel,?? //x
軸標題
???????????????? String valueAxisLabel,? //y
軸標題
???????
?????????XYDataset dataset,?????? //
數(shù)據(jù)源
???????????????? boolean legend,????????? //
是否顯示圖例
???????????????? boolean tooltips,??????? //
是否顯示
tooltip
???????????????? boolean urls);?????????? //
是否指定
url
時序圖的
Plot
對象是
XYPlot
類型。
XYPlot
對象的
x
軸是
DateAxis
對象,
y
軸是
NumberAxis
對象,繪制單元是
XYLineAndShapeRenderer
對象,數(shù)據(jù)源是
XYDataset
對象。
Plot
對象的獲取操作:
?????? XYPlot plot = (XYPlot) chart.getPlot();
X
軸對象的獲取操作:
?????? DateAxis xAxis = (DateAxis) plot.getDomainAxis();
Y
軸對象的獲取操作:
?????? NumberAxis yAxis =(NumberAxis) plot.getRangeAxis();
Renderer
對象的獲取操作:
?????? XYItemRenderer renderer= plot.getRenderer();
?
時序圖可以接受一切
XYDataset
類型的數(shù)據(jù)源,下面講解一下常用的
XYDataset
類型
TimeSeriesCollection
的使用方式。
實例化:
?????? TimeSeriesCollection dataset=new TimeSeriesCollection();
添加數(shù)據(jù)操作:
?????? dataset.
addSeries(TimeSeries); //
后面講解
TimeSeries
對象
刪除數(shù)據(jù)操作:
?????? dataset.
removeSeries(int index);
查詢數(shù)據(jù)操作
:
?????? dataset.
getSeries(int series);
?
TimeSeries
對象操作
實例化:
?????? 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);
查詢數(shù)據(jù)操作:
??????
ts.
getValue(RegularTimePeriod period);
類
RegularTimePeriod
是
JFreeChart
提供的時間模板類,它有很多具體的時間類,比如:
Minute
、
Second
、
Hour
、
Day……
等,不再詳述。