深入JFreeChart应用实例(2)



深入JFreeChart应用实例(2)转载 http://www.blogjava.net/JavaExplore/archive/2006/09/12/69261.html   谢谢作者!

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 )平面柱状图

       生成柱状图操作:

       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 对象。

       具体使用以及操作与平面柱状图雷同,不在详述。

饼状图

(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类型 ,不再详述。

多重饼状图

( 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 饼状图对象。

线图

( 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 柱状图相同。

时序图

生成时序图:

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