`
沙漠魚
  • 浏览: 39759 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

深入探究JFreeChart(2)

阅读更多


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……?等,不再详述。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics