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 是一个强大的 Java 图形库,专用于创建各种商业图表,如饼图、柱状图、线图、甘特图、股票图等。它是一个开源项目,可以在 SourceForge.net 上获取其源码和 API。JFreeChart 提供了丰富的功能,包括支持...
深入探究JFreeChart,详细介绍了JFreeChart中各类的使用方法以及需要注意的地方,初学起来很轻松
这份“JFreeChart深入探究实用文档”是学习和掌握JFreeChart的宝贵资源,下面我们将详细探讨其主要知识点。 1. **JFreeChart基础** - **安装与引入**:首先,了解如何将JFreeChart库添加到项目中,无论是通过Maven...
接着,"【原创】深入探究JFreeChart(1).mht"和"【原创】深入探究JFreeChart(2).mht"是一篇关于JFreeChart的深度教程。MHT是单一文件网页,这种格式将HTML、图像和其他资源打包在一个文件中,方便阅读和分享。这...
在深入研究JFreeChart时,有几个关键知识点值得关注: 1. **图表类型**:了解JFreeChart支持的各类图表,如折线图、柱状图、饼图、散点图、甘特图等,以及它们各自的用途。 2. **数据模型**:理解如何将数据映射到...
通过查看源代码,开发者可以深入探究内部实现细节,理解数据如何被处理,以及各种图表组件是如何构建的。这对于定制图表功能或优化性能的开发者来说尤其有用。如果你遇到了特定问题,查阅源代码可能帮助你找到解决...
《精通Java Web动态图表编程》这本书是专门为...总的来说,《精通Java Web动态图表编程》这本书将引导你深入探究Java Web开发中的动态图表制作,让你能够创建出美观、交互性强的可视化应用,提高业务分析和决策的效率。
【JSP科研处管理信息系统】是一个基于Java Server...通过对这些知识点的理解,可以深入探究【JSP科研处管理信息系统】的设计思路和实现方式,无论是对于学习JSP技术,还是提升科研管理信息化水平,都有很高的参考价值。
3. **数据关系分析**:股票指数与国家经济的关系可以通过收集历史数据进行统计分析,例如使用相关性分析、回归分析等方法,探究二者之间是否存在显著的正相关或负相关关系。 4. **Java编程**:在处理这类问题时,...
在深入探究ShotCaller项目时,开发者和研究人员可以学习到如何将Java应用于数据科学项目,以及如何解决实际工程问题。这个项目不仅展示了Java在数据分析领域的应用,也反映了机器学习在科学研究中的重要作用。通过...
"Test4U: 在线考试门户"是一款基于Java技术构建的平台,专为教育和培训领域...对于学习和理解Java Web开发,这个项目提供了丰富的实践素材,可以深入探究MVC架构、数据库设计、安全策略以及测试方法等多个关键知识点。
本文将深入探讨HBase的性能测试细节,重点剖析数据插入性能,并通过实证分析揭示其背后的机制与优化策略。 #### 数据插入性能测试设计 在评估HBase的实时数据插入性能时,测试场景设计至关重要。以随机值的Rowkey...
在这个名为"hw2_chicago_data_challenge"的开源计算家庭作业中,主要目标是探究两个关键问题:一是分析芝加哥各街区的犯罪率与平均收入之间的关联性;二是考察犯罪率与当地警察局数量的关系。这个任务涉及到的数据...
《MyTeaProject:探索Java技术的茶文化实践》 ...通过深入探究这个项目,我们可以了解到如何利用Java技术来创新,将传统的茶文化以现代化的方式呈现,同时也能提升自己的编程技能和项目管理能力。
《探究Java技术在Wikipedia反向链接分析中的应用》 在信息技术领域,数据挖掘与分析是一项重要的工作,尤其是在网络环境中,海量的数据蕴含着无尽的信息价值。Wikipedia,作为全球最大的在线百科全书,其丰富的链接...
5. **数据分析与可视化**:框架可能包含各种统计分析和可视化工具,用于探究版本控制、bug报告和邮件列表之间的关系,例如,哪些bug最常被提及,哪些开发者在邮件列表中最活跃,重构活动与bug修复之间的时间间隔等。...