3??数据源处理
JFreeChart?中的数据源是DataSet接口类型。该接口有三个主要的子类接口:CategoryDataset、PieDataset、SeriesDataset
CategoryDataset?接口的实现类基本上都维护了一个三元组<value,row,col>的列表结构。不同的实现类中value?的类型不相同。<row,col>唯一确定一个三元组。CategoryDataset的实现类提供对这个三元组的增删改查操作。
PieDataset?接口有两个主要的实现类:CategoryToPieDataset?、DefaultPieDataset。PieDataset接口的实现类基本上都维护了一个二元组<key,value>的列表结构。Key唯一确定一个二元组。CategoryDataset的实现类提供对这个二元组的增删改查操作。CategoryToPieDataset中的二元结构列表通过对CategoryDataset类型的对象指定行或者列转化过来。DefaultPieDataset直接维护一个二元结构列表。
SeriesDataset?接口的实现类基本上都维护了一种特定数据结构的列表。以TimeSeriesCollection为例。它维护一个TimeSeries对象列表,提供对该列表的增删查操作。每个TimeSeries对象维护一个<time,value>列表,提供对该列表的增删改查操作。
三?JFreeChart?中对常见图形的处理
???????JFreeChart?并不存在多个不同的类来生成不同的图形。所有的图形都是具体类?JFreeChart?的实例化对象,初始化?JFreeChart?对象的时候通过指定不同的?Plot?实现类就可以显示出不同的图形。不同的?Plot?实现类具有不同的?Renderer?对象、?Axis?对象、?Dataset?对象。
???????JFreeChart?提供工厂类?ChartFactory?方便使用者生成各种不同的图形。?ChartFactory?类的各个工厂方法中实现对具体?Plot?的指定以及对类?JFreeChart?构造函数的调用。
???????下面以常用图形说一下常用的使用流程(大部分的操作讲的并不全面,比如?JFreeChart?可能提供了很多增加、修改数据的方式,下文中可能只列举一种)。
1?柱状图
(?1?)平面柱状图
???????生成柱状图操作:
???????JFreeChart?chart?=?ChartFactory.createBarChart(
??????????????????????String?title,?????????????????//?图标题
????????????????String?categoryAxisLabel,?????//x?轴标题
????????????????String?valueAxisLabel,???????//y?轴标题
????????????????CategoryDataset?dataset,??????//?数据源
????????????????PlotOrientation?orientation,????//?显示方向
?????????????????boolean?legend,?????????????//?是否显示图例
?????????????????boolean?tooltips,????????????//?是否显示?tooltip
?????????????????boolean?urls)?;??????????????//?是否指定?url
平面柱状图的?Plot?对象是?CategoryPlot?类型。?CategoryPlot?对象的?x?轴是?CategoryAxis?对象,?y?轴是?NumberAxis?对象,绘制单元是?BarRenderer?对象,数据源是?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();
获取数据源:
CategoryDataset?dataset=plot.getDataset();
?
???????柱状图可以接受一切?CategoryDataset?类型的数据源,下面讲解一下常用的?CategoryDataset?类型?DefaultCategoryDataset?的使用方式
实例化:
DefaultCategoryDataset?dataset?=?new?DefaultCategoryDataset();
增加数据
dataset?.addValue(double?value,?Comparable?rowKey,?Comparable?columnKey)?;
删除数据:
???????dataset?.removeValue(Comparable?rowKey,?Comparable?columnKey);
???????或者
???????dataset.?removeColumn(int?columnIndex);
???????或者
???????dataset.?removeColumn(Comparable?columnKey);
???????对行同样有上述两种删除方式,不在列举。
修改数据:
???????dataset.?setValue(double?value,?Comparable?rowKey,?Comparable?columnKey);
查询数据?:
对?plot?对象、绘制单元、?x?轴、?y?轴的显示特性修改不再一一介绍。
(?2?)?3D?柱状图
???????对应的工厂方法为?createBarChart3D?,该方法的参数与平面柱状图相同。?3D?柱状图的?Plot?对象是?CategoryPlot?类型。?CategoryPlot?对象的?x?轴是?CategoryAxis3D?对象,?y?轴是?NumberAxis3D?对象,绘制单元是?BarRenderer3D?对象,数据源是?CategoryDataset?对象。
???????具体使用以及操作与平面柱状图雷同,不在详述。
2?饼状图
(1)?平面饼状图
生成平面饼状图:
JFreeChart?chart?=?ChartFactory.?createPieChart(String?title,?//?图标题
??????????????????????????PieDataset?dataset,???????//?数据源
??????????????????????????boolean?legend,?????????//?是否显示图例
??????????????????????????boolean?tooltips,?????????//?是否显示tooltip
??????????????????????????boolean?urls)?;??????????//?是否指定url
平面饼状图的Plot对象是PiePlot类型。PiePlot对象没有x轴对象、y轴对象、绘制单元对象,数据源是PieDataset对象。
?
获取PiePlot对象操作为:
PiePlot?plot?=?(PiePlot)?chart.getPlot();
获取数据源:
PieDataset?dataset=?plot?.getDataset();
?
饼状图可以接受一切?PieDataset?类型的数据源,下面讲解一下常用的?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?,参数与平面饼状图相同。与平面饼状图的差别在于?Plot?对象是PiePlot3D类型?,不再详述。
3?多重饼状图
(?1?)多重平面饼状图
生成多重平面饼状图:
???????JFreeChart?chart?=?ChartFactory.?createMultiplePieChart
(String?title,???????????????//?图标题
????????????????????????CategoryDataset?dataset,?????//?数据源
????????????????????????TableOrder?order,???????//?指定提取数据的方式(按行或者按列)
????????????????????????boolean?legend,????????????//?是否显示图例
????????????????????????boolean?tooltips,????????????//?是否显示?tooltip
????????????????????????boolean?urls)???;????????????//?是否指定?url
多重平面饼状图的?Plot?对象是?MultiplePiePlot?类型。?MultiplePiePlot?对象没有?x?轴对象、?y?轴对象、绘制单元对象,数据源是?CategoryDataset?对象。?MultiplePiePlot?对象中可以含有多个子?JFreeChart?对象,子?JFreeChart?对象是上面讲过的饼状图对象。
?
获取?MultiplePiePlot?对象操作为:
MultiplePiePlot?plotMain?=?(MultiplePiePlot)?chart.getPlot();
获取子?JFreeChart?的操作为:
???????JFreeChart?childChart=plotMain.getPieChart();
获取数据源:
CategoryDataset?dataset=?plotMain?.getDataset();
(?2?)多重?3D?饼状图
???????对应的工厂方法为?createMultiplePieChart3D?,该方法的参数与?多重平面饼状图?相同。?多重?3D?饼状图的?Plot?对象是?MultiplePiePlot?类型。?MultiplePiePlot?对象中可以含有多个子?JFreeChart?对象,子?JFreeChart?对象是上面讲过的?3D?饼状图对象。
4?线图
(?1?)平面线图
???????生成平面线图:
???????JFreeChart?chart?=?ChartFactory.?createLineChart(String?title,??//?图标题
?????????????????????????String?categoryAxisLabel,?????????//x?轴标题
?????????????????????????String?valueAxisLabel,????????????//y?轴标题
?????????????????????????CategoryDataset?dataset,???????????//?数据源
?????????????????????????PlotOrientation?orientation,?????????//?显示方向
?????????????????????????boolean?legend,?????????????????//?是否显示图例
?????????????????????????boolean?tooltips,?????????????????//?是否显示?tooltip
?????????????????????????boolean?urls);??????????????????//?是否指定?url
平面线图除了的?Plot?对象中绘制单元对象是?LineAndShapeRenderer?对象,其他一切组成对象与平面柱状图相同。
获取?Renderer?操作:
LineAndShapeRenderer?renderer=(LineAndShapeRenderer)?plot.getRenderer();
其他参考平面柱状图。
(?2?)?3D?线图
对应工厂方法为?createLineChart3D?,参数与?createLineChart?相同。?3D?线图的组成对象除了绘制单元对象是?LineAndShapeRenderer3D?对象,其他一切组成对象与?3D?柱状图相同。
5?时序图
生成时序图:
???????JFreeChart?chart?=?ChartFactory.createTimeSeriesChart(
??????????????String?title,????//?图标题
?????????????????String?timeAxisLabel,???//x?轴标题
?????????????????String?valueAxisLabel,??//y?轴标题
?????????????????XYDataset?dataset,???????//?数据源
?????????????????boolean?legend,??????????//?是否显示图例
?????????????????boolean?tooltips,????????//?是否显示?tooltip
?????????????????boolean?urls);???????????//?是否指定?url
时序图的?Plot?对象是?XYPlot?类型。?XYPlot?对象的?x?轴是?DateAxis?对象,?y?轴是?NumberAxis?对象,绘制单元是?XYLineAndShapeRenderer?对象,数据源是?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?类型的数据源,下面讲解一下常用的?XYDataset?类型?TimeSeriesCollection?的使用方式。
实例化:
???????TimeSeriesCollection?dataset=new?TimeSeriesCollection();
添加数据操作:
???????dataset.?addSeries(TimeSeries);?//?后面讲解?TimeSeries?对象
删除数据操作:
???????dataset.?removeSeries(int?index);
查询数据操作?:
???????dataset.?getSeries(int?series);
?
TimeSeries?对象操作
实例化:
???????TimeSeries?ts=TimeSeries(String?name,?Class?timePeriodClass);
增加数据操作:
???????ts.?add(RegularTimePeriod?period,?double?value);?
删除数据操作:
???????ts.?delete(RegularTimePeriod?period);???
修改数据操作:
???????ts.?update(RegularTimePeriod?period,?Number?value);
查询数据操作:
???????ts.?getValue(RegularTimePeriod?period);
类?RegularTimePeriod?是?JFreeChart?提供的时间模板类,它有很多具体的时间类,比如:?Minute?、?Second?、?Hour?、?Day……?等,不再详述。
深入探究JFreeChart(2)
最新推荐文章于 2024-08-21 21:40:52 发布