1 简介

JFreeChart 是 SourceForge.net 上的一个开源项目,它的源码和 API 都可以免费获得。 JFreeChart 的功能非常强大,可以实现饼图 ( 二维和三维 ) ,  柱状图  ( 水平 , 垂直 ), 线图 , 点图 , 时序图 , 甘特图 ,  股票行情图 , 混和图 ,  温度计图 ,  刻度图等常用商用图表,  图形可以导出成 PNG 和 JPEG 格式,同时还可以与 PDF 和 EXCEL 关联,支持对图形的放大、缩小,支持常见图形的 3D 显示。

2 图形 对象的处理

2 .1 JFreeChart对象

JFreeChart 可以生成很多图形对象,它的工厂类提供了 33 个工厂方法用于生成不同的图形对象(具体的工厂方法可以参见 JFreeChart 的 API手册或者源码中的 ChartFactory 类 )。              JFreechart 对图形对象的抽象具体化。图形对象( JFreeChart ),由 Title(主标题 ) , SubTitle (子标题 ) , Plot (图形的绘制结构)等几个主要对象组成。各个组成部分如下图所示:

这是一个 JFreeChart 对象,上面的“ chart 标题”是 Title 对象,中间区域是 Plot 对象(包括绘图区域和坐标轴区域),下面的区域是LegendTitle 对象,是一种 SubTitle 对象。

每个 JFreeChart 对象只能有 1 个 Title 对象, 1 个 Plot 对象,可以有多个 SubTitle 对象。 JFreeChart 对象可以进行的操作有:背景的设置(背景颜色、背景图片、透明度等)、边框的设置(是否可见、笔画、 Paint 等)、渲染方式的设置、标题对象的设置、子标题对象的增删查操作。(本文中的所有操作都不提供代码级的介绍,可参见 API 手册或者源码)

2 .2 主标题对象

主标题对象是 TextTitle 类型,可以进行的操作有:背景设置、字体设置(字体类型、颜色、内容、对齐方式等操作)、 tooltip 设置、 URL 设置。

2 .3 Plot 对象

Plot 对象是图形的绘制结构对象。 JFreeChart 中含有很多不同的 Plot 对象,每一种图形对象中的 Plot 对象都在实例化的时候创建。所有的Plot 共有的操作有:背景设置(背景颜色、背景图片、透明度等)、前景透明度设置、无数据存在情况的设置(显示的字符内容、显示的字体、显示的 Paint )、放大缩小比例的设置,大部分 Plot 对象还有设置 Datset 、设置 Renderer 对象操作。

JFreeChart 中有 18 种 Plot 抽象类的具体实现类。 Plot 的具体实现类主要由以下重要对象组成: Renderer 对象(图形的绘制单元——绘图域) Datset (图形的数据源), DomainAxis (区域轴,相当于 x 轴), RangeAxis (范围轴,相当于 y 轴)。不同的 Plot 对象组成方式不尽相同,有的不含有 Renderer 对象,比如 CompassPlot 、 ContourPlot 、 MultiplePiePlot 、 PiePlot 等,有的不含有 DomainAxis 、 RangeAxis对象,另外除了 FastScatterPlot 类都含有 Datset 对象, FastScatterPlot 使用 float 的二维数组充当数据源。尤其说明一点,饼状图相关的Plot 对象( MultiplePiePlot 、 PiePlot 、 PiePlot3D 、 RingPlot )中都不含有 Renderer 对象、 DomainAxis 对象、 RangeAxis 对象。

一般来说, Datset 对象存储数据模型, Renderer 对象存储显示模型, Plot 对象根据 Datset 对象、 Renderer 对象完成画图操作。

仍以上面的图形讲解 Plot 对象的组成。

上图的中间区域是是一个 XYPlot 对象。其中的折线部分即是图形的绘制单元 Renderer 对象。 X 轴是 DomainAxis , y 轴是 RangeAxis ,其中 Datset 对象属于数据模型范畴,是 UI 不可见对象。该图中的 plot 背景色、网格线的各种设置可以通过 XYPlot 对象本身完成。

下面讲解 Renderer 对象、 Axis 对象( X 轴、 y 轴都属于 Axis 对象), Datset 对象在后续章节中专门讲解。

2 .3.1 Renderer对象

Renderer 对象是图形的绘制单元。 JFreeChart 提供了两个接口 CategoryItemRenderer 和 XYItemRenderer 、 1 个抽象类 AbstractRenderer供具体的 Renderer 类实现,给出了将近 50 种具体实现类。

一般来说 Renderer 对象可进行的操作有:对 item label (下图中的柱状图上的红色数字即为 item label 的示例)的默认设置( item label 的产生方式、是否可见、字体、 Paint 、正反向 item label 的位置设置等)、绘制图形的边框默认设置( Paint 、笔画、是否可见等)、绘制图形的默认设置(形状、笔画、是否可见、对应的图例中是否可见等,折线图还有线条是否可见、折点图形是否可见、折点图形是否填充、折点图形的形状、对应的图例中线条是否可见、图形是否可见、整体是否可见等)、以及对指定 item label 的设置、指定绘制图形的设置。可以说和具体绘制的图形相关的属性都可以通过 Renderer 对象设置。

不同的 Renderer 的实现类实现了不同的显示方式,在含有 Renderer 对象的 JFreeChart 对象中, R enderer 对象决定了JFreeChart对象的显示方式。例如:柱状图的Plot对象中默认的Renderer对象是 CategoryItemRenderer 对象,通过设置 Plot 对象的Renderer对象 为 LineAndShapeRenderer,则柱状图变为线图。使用中一般不需要显式的实例化一个 R enderer 对象,一般通过 JFreeChart 对象的 Plot 对象调用现有的 R enderer 对象进行重新设置等操作。

2 .3.2 Axis对象

JFreeChart 提供了两种类型的坐标轴: CategoryAxis (等级轴)和 ValueAxis (值轴), ValueAxis 又有 3 个子类: DateAxis (时间轴)、NumberAxis (数字轴)、 PeriodAxis (时期轴)。这些坐标轴还有更详细的子类,不再一一列举

Axis 对象可进行的操作有:标题的设置(内容、字体、Paint、显示角度等)、坐标线的设置(笔画、Paint、是否可见等)、刻度线的设置(是否可见、笔画、Paint、位于绘图区域的长度、位于绘图区域外的长度等)、刻度标示的设置(笔画、Paint、字体、与轴的距离等)、坐标轴范围设置等。

CategoryAxis 对象还可以进行的操作有: 刻度标示间距 设置( 最小间距、最大间距、指定间距)等。

ValueAxis 对象可进行的操作有:轴端设置(显示的图形形状)、范围设置(是否自动产生范围、自动产生的最小范围、最大范围、指定确定范围、指定范围大小等)、间隔设置(是否自动产生间隔、指定间隔)等。

DateAxis 对象还有对时间刻度显示格式的设置操作。

2 . 4 子标题对象

子标题对象是 Title 类型的对象,一个JFreeChart可以有多个子标题对象。JFreeChart提供了5种Title的实现,可以是图片、文本、图例等的形式。

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

转载于:https://www.cnblogs.com/telwanggs/p/4929650.html

深入探究JFreeChart相关推荐

  1. 吴恩达《深度学习》第四门课(2)卷积神经网络:实例探究

    2.1为什么要进行实例探究 (1)就跟学编程一样,先看看别人怎么写的,可以模仿. (2)在计算机视觉中一个有用的模型,,用在另一个业务中也一般有效,所以可以借鉴. (3)本周会介绍的一些卷积方面的经典 ...

  2. 异步编程之Promise(2):探究原理

    异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...

  3. 报表应用系列——图表JFreeChart: 第 4 章 折线图

    双击代码全选 1 2 3 4 5 DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(100 ...

  4. Lucene.net中文分词探究

    一.中文分词方式: 中文分词几种常用的方式: A. 单字分词 单字分词,顾名思义,就是按照中文一个字一个字地进行分词.如:我们是中国人,效果:我/们/是/中/国/人. B. 二分法 二分法,就是按两个 ...

  5. Java项目:学生考勤管理系统(java+SSM+Poi导出+Easyui+JFreeChart+maven+mysql)

    源码获取:博客首页 "资源" 里下载! 这个项目适合SSM框架的初学者(涉及大量增删改查,很适合初学者)以及对Shiro安全框架和Poi技术感兴趣的同学. 项目功能: 用户管理功能 ...

  6. 查询在应用程序运行得很慢, 但在SSMS运行得很快的原因探究

    原文:查询在应用程序运行得很慢, 但在SSMS运行得很快的原因探究 查询在应用程序运行得很慢, 但在SSMS运行得很快的原因探究 -理解性能疑点 1      引言 内容来自http://www.so ...

  7. 中文NLP的分词真有必要吗?李纪为团队四项任务评测一探究竟 | ACL 2019

    作者| Yuxian Meng.Xiaoya Li.Xiaofei Sun.Qinghong Han.Arianna Yuan. Jiwei Li 译者 | Rachel 责编 | Jane 出品 | ...

  8. 聚类分析案例:探究用户对物品类别的喜好细分降维

    聚类分析案例:探究用户对物品类别的喜好细分降维 数据如下: order_products__prior.csv:订单与商品信息 字段:order_id, product_id, add_to_cart ...

  9. jfreechart的使用

    jfreechart 简介(百度百科): JFreeChart是JAVA平台上的一个开放的图表绘制类库.它完全使用JAVA语言编写,是为applications, applets, servlets ...

最新文章

  1. 文字链接_新生命道目录及音频、文字链接(20200501更新)
  2. al-khaser 调试器,虚拟机检测工具
  3. 2018 年都过去了,你还没有掌握用户运营的核心技巧?
  4. 关于extjs中动态添加TabPanel的tab项并以iframe显示的整理(转)
  5. 【数据结构】线性表的顺序存储结构(c语言实现)
  6. ZeroMQ接口函数之 :zmq_ctx_shutdown - 停止一个ZMQ context
  7. pythondistutils安装_python – 与distutils / pip一起安装Bash完成
  8. 【Mybatis框架】输入映射-pojo包装类型
  9. linux内核字符驱动设备,Linux学习笔记——linux内核字符设备驱动-Go语言中文社区...
  10. 微软结束 SolarWinds 事件调查:部分源代码被盗,1000人参与
  11. Java多线程——线程安全问题
  12. 41. 流感传染(宽搜)
  13. AppWeb服务后台登陆及配置的方法解答
  14. 微信小程序picker默认请选择
  15. 【Python爬虫】-从入门到入门-个人技术经验汇总-【爬虫和数据】
  16. 一文搞懂由积分判断函数零点个数问题(积分证明题总结笔记2/3)
  17. VIPKID数千万战略投资新学说,深度参与国际教育行业
  18. 原生JavaScript实现AJAX、JSONP
  19. 房地产楼盘三维展示|户型3D展示效果
  20. “最牛愤青教授”郑强叫板当代教育

热门文章

  1. java值传递和引用传递_辨析Java方法参数中的值传递和引用传递
  2. (04)FPGA学习基础
  3. (113)FPGA面试题-LUT计算问题
  4. (74)Verilog HDL系统函数和任务:$readmemb
  5. (80)Verilog HDL测试激励:保存波形文件
  6. sqlite3学习笔记-方法介绍和测试代码
  7. 【蓝桥杯单片机】实战之基础停表
  8. linux创建虚拟账号,linux vsftpd 创建虚拟用户 过程记录
  9. 数字图像处理(四)——图像编码技术(一)
  10. STM32学习——MPU6050姿态传感器