`
沙漠魚
  • 浏览: 42859 次
  • 性别: 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……?等,不再详述。

分享到:
评论

相关推荐

    深入探究JFreeChart(图表报表实用教材)

    JFreeChart 是一个强大的 Java 图形库,专用于创建各种商业图表,如饼图、柱状图、线图、甘特图、股票图等。它是一个开源项目,可以在 SourceForge.net 上获取其源码和 API。JFreeChart 提供了丰富的功能,包括支持...

    深入探究JFreeChart

    深入探究JFreeChart,详细介绍了JFreeChart中各类的使用方法以及需要注意的地方,初学起来很轻松

    JFreeChart 深入探究 实用文档

    这份“JFreeChart深入探究实用文档”是学习和掌握JFreeChart的宝贵资源,下面我们将详细探讨其主要知识点。 1. **JFreeChart基础** - **安装与引入**:首先,了解如何将JFreeChart库添加到项目中,无论是通过Maven...

    JFreeChart相关资料

    接着,"【原创】深入探究JFreeChart(1).mht"和"【原创】深入探究JFreeChart(2).mht"是一篇关于JFreeChart的深度教程。MHT是单一文件网页,这种格式将HTML、图像和其他资源打包在一个文件中,方便阅读和分享。这...

    jfreechart-1.0.8-demo.jnlp

    在深入研究JFreeChart时,有几个关键知识点值得关注: 1. **图表类型**:了解JFreeChart支持的各类图表,如折线图、柱状图、饼图、散点图、甘特图等,以及它们各自的用途。 2. **数据模型**:理解如何将数据映射到...

    jfreechart-1.0.14 库文件,源代码(src)及javadoc文件

    通过查看源代码,开发者可以深入探究内部实现细节,理解数据如何被处理,以及各种图表组件是如何构建的。这对于定制图表功能或优化性能的开发者来说尤其有用。如果你遇到了特定问题,查阅源代码可能帮助你找到解决...

    《精通Java Web动态图表编程》

    《精通Java Web动态图表编程》这本书是专门为...总的来说,《精通Java Web动态图表编程》这本书将引导你深入探究Java Web开发中的动态图表制作,让你能够创建出美观、交互性强的可视化应用,提高业务分析和决策的效率。

    JSP科研处管理信息系统(源代码+论文).zip

    【JSP科研处管理信息系统】是一个基于Java Server...通过对这些知识点的理解,可以深入探究【JSP科研处管理信息系统】的设计思路和实现方式,无论是对于学习JSP技术,还是提升科研管理信息化水平,都有很高的参考价值。

    2020年B题 股指与国家经济.zip

    3. **数据关系分析**:股票指数与国家经济的关系可以通过收集历史数据进行统计分析,例如使用相关性分析、回归分析等方法,探究二者之间是否存在显著的正相关或负相关关系。 4. **Java编程**:在处理这类问题时,...

    ShotCaller:预测霍普金森分裂压力棒上的下一个镜头

    在深入探究ShotCaller项目时,开发者和研究人员可以学习到如何将Java应用于数据科学项目,以及如何解决实际工程问题。这个项目不仅展示了Java在数据分析领域的应用,也反映了机器学习在科学研究中的重要作用。通过...

    test4u:在线考试门户

    "Test4U: 在线考试门户"是一款基于Java技术构建的平台,专为教育和培训领域...对于学习和理解Java Web开发,这个项目提供了丰富的实践素材,可以深入探究MVC架构、数据库设计、安全策略以及测试方法等多个关键知识点。

    HBase性能深度分析

    本文将深入探讨HBase的性能测试细节,重点剖析数据插入性能,并通过实证分析揭示其背后的机制与优化策略。 #### 数据插入性能测试设计 在评估HBase的实时数据插入性能时,测试场景设计至关重要。以随机值的Rowkey...

    hw2_chicago_data_challenge:开源计算家庭作业2

    在这个名为"hw2_chicago_data_challenge"的开源计算家庭作业中,主要目标是探究两个关键问题:一是分析芝加哥各街区的犯罪率与平均收入之间的关联性;二是考察犯罪率与当地警察局数量的关系。这个任务涉及到的数据...

    MyTeaProject

    《MyTeaProject:探索Java技术的茶文化实践》 ...通过深入探究这个项目,我们可以了解到如何利用Java技术来创新,将传统的茶文化以现代化的方式呈现,同时也能提升自己的编程技能和项目管理能力。

    Check-Wikipedia-Backlinks-

    《探究Java技术在Wikipedia反向链接分析中的应用》 在信息技术领域,数据挖掘与分析是一项重要的工作,尤其是在网络环境中,海量的数据蕴含着无尽的信息价值。Wikipedia,作为全球最大的在线百科全书,其丰富的链接...

    Gnome-framework:MSR2009中用于分析Gnome数据集的框架

    5. **数据分析与可视化**:框架可能包含各种统计分析和可视化工具,用于探究版本控制、bug报告和邮件列表之间的关系,例如,哪些bug最常被提及,哪些开发者在邮件列表中最活跃,重构活动与bug修复之间的时间间隔等。...

Global site tag (gtag.js) - Google Analytics