初步认识JFreeChart

原创 2007年10月14日 09:29:00

初步走进JfreeChar,被它里面各种各样的图表所吸引,自认为即美观又使用

1. JFreeChart简介
JFreeChart是开放源代码站点SourceForge.net上的一个JAVA项目,它主要用来生成各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。这些不同式样的图表基本上可以满足目前的需求。
2. JFreeChart的获取
JFreeChart JFreeChart公司在开源网站SourceForge.net上的一个项目。我们可以从jfree官方网站上获取最新版本和相关资料
获取地址:http://www.jfree.org/jfreechart/index.html(同时可以获得简明介绍)。
3.JFreeChart的核心类库
JFreeChart的核心包包括org.jfree.chart,org.jfree.data。其中前者是图集主要与图形本身有关,后者是数据集与图形显示的数据有关。
核心类主要有:
org.jfree.chart.JFreeChart :图表对象,任何类型的图表的最终表现形式都是在该对象中进行一些属性的定制。JFreeChart引擎本身提供了一个工厂类用于创建不同类型的图表对象
org.jfree.data.category.XXXDataSet:
数据集对象,用于提供显示图表所用的数据。根据不同类型的图表对应着很多类型的数据集对象类
org.jfree.chart.plot.XXXPlot
:图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要AxisRenderer以及数据集对象的支持
org.jfree.chart.axis.XXXAxis
:用于处理图表的两个轴:纵轴和横轴
org.jfree.chart.render.XXXRender
:负责如何显示一个图表对象
org.jfree.chart.urls.XXXURLGenerator:
用于生成Web图表中每个项目的鼠标点击链接
XXXXXToolTipGenerator:
用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类
原理图如下:
 
 
4. JFreeChart的配置安装
解压jfreechart-1.0.6.zip到指定位置,并把解压包中的三个jar包:jfreechart-1.0.6.jar jcommon-1.0.10.jargnujaxp.jar拷贝到相应的位置。如果是Application开发,需把上述三个文件拷贝到%JAVA_HOME%/LIB中,同时在环境变量CLASSPATH中加入;如果是WEB开发,需要把上述三个文件拷贝到应用程序的WEB-INF/lib目录下。加上第三个jar包有时web.xml会报错,这时要么把它去掉,要么在web.xml中做以下配置便可:
<servlet>
<servlet-name>DisplayChart</servlet-name>
<servlet-class>org.jfree.chart.
servlet.DisplayChart</servlet-class>
</servlet>
5. JFreeChart的应用举例
按照上面的配置搭建好环境后,来测试一下饼图和柱状图的形成。
(1)    测试饼图(PieChart.java
该程序通过编写一个普通的java 类来测试一下pie charts (2D and 3D) 饼图(平面和立体)的形成。代码如下:
public class PieChart {
       public JFreeChart getChart(){
              // 1 创建Dataset,用数据源中的数据填充
              DefaultPieDataset dataset = new DefaultPieDataset();
              dataset.setValue("短信", new Double(10));
              dataset.setValue("上网", new Double(20));
              dataset.setValue("本地通话", new Double(30));
              dataset.setValue("长途", new Double(50));
              // 2 创建图表主对象JFreechart
              JFreeChart chart = ChartFactory.createPieChart3D("话费统计", dataset, true,
                            true, true);
              chart.setBackgroundPaint(Color.pink);
              chart.setBorderVisible(true);
              //设置图型为3D状的
              //PiePlot3D plot = (PiePlot3D) chart.getPlot();
             //获得图表显示对象
              PiePlot plot = (PiePlot) chart.getPlot();
             /** 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数
* 值, {2} 表示所占比例 ,小数点后两位
*
*/
              plot.setLabelGenerator(new StandardPieSectionLabelGenerator(
                     "{0}={1}{2}", new DecimalFormat("00.0"), new DecimalFormat("0.00%")));
            // 图例显示百分比:自定义方式, {0} 表示选项, {2} 表示数值
              plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator(
                            "{0}={2}", new DecimalFormat("00.0"), new DecimalFormat(
                            "0.00%")));
              //分离图形,只对平面图有效,立体的不可以
              //plot.setExplodePercent("长途", 0.4);
             //设置指定块的颜色
              plot.setSectionPaint("长途",Color.ORANGE);
             // 指定图片的透明度(0.0-1.0)
              plot.setForegroundAlpha(0.5f);
              plot.setLabelFont(new Font("sim-hei",Font.ITALIC,14));
              plot.setSectionOutlineStroke(new BasicStroke(1f));
              plot.setSectionOutlinesVisible(false);
              plot.setBackgroundPaint(Color.white);
              return chart;
       }
       public static void main(String[] args) {
              PieChart p = new PieChart();
              JFreeChart chart = p.getChart();
              // 3 显示在GUI
              ChartFrame frame = new ChartFrame("话费", chart);
              frame.pack();
              frame.setVisible(true);
              // 3 显示在图片上
              // try {
              // ChartUtilities.saveChartAsJPEG(new File("d://t.jpg"), chart, 700,
              // 700);
              // } catch (IOException e) {
              // // TODO Auto-generated catch block
              // e.printStackTrace();
              // }
       }
}
运行结果如下所示:
 
(2)    测试柱状图(BarChart.java
该程序也是通过编写一个普通的java类来测试一下如何利用JFreeChart来形成bar charts 柱状图。代码如下:
public class BarChart {
       public JFreeChart getChart() {
              String s1 = "java";
              String s2 = "c++";
              String s3 = "c#";
              String c1 = "2001";
              String c2 = "2002";
              String c3 = "2003";
              String c4 = "2004";
              // 1 创建Dataset,用数据源中的数据填充
              DefaultCategoryDataset dataset = new DefaultCategoryDataset();
              dataset.setValue(10, s1, c1);
              dataset.setValue(14, s1, c2);
              dataset.setValue(16, s1, c3);
              dataset.setValue(18, s1, c4);
              dataset.setValue(-18, s2, c1);
              dataset.setValue(14, s2, c2);
              dataset.setValue(8, s2, c3);
              dataset.setValue(3, s2, c4);
              dataset.setValue(-4, s3, c1);
              dataset.setValue(7, s3, c2);
              dataset.setValue(9, s3, c3);
              dataset.setValue(10, s3, c4);
              // 2 创建JFreechart对象
              JFreeChart chart = ChartFactory.createBarChart("progaming", "year",
                            "account", dataset, PlotOrientation.VERTICAL, true, true, true);
              CategoryPlot plot = (CategoryPlot) chart.getPlot();
              plot.setDomainGridlinesVisible(true);
              plot.setDomainGridlinePaint(Color.red);
              plot.setRangeGridlinePaint(Color.blue);
              plot.setRangeGridlinesVisible(true);
              plot.setBackgroundPaint(Color.gray);
        //设置纵轴的刻度
              NumberAxis naxis = (NumberAxis) plot.getRangeAxis();
              naxis.setRange(new Range(-40, 40));
              naxis.setTickUnit(new NumberTickUnit(10))
           //设置图形的宽度
              CategoryAxis caxis = plot.getDomainAxis();
              caxis.setUpperMargin(0.3);
              caxis.setFixedDimension(0.3);
             
              BarRenderer render = (BarRenderer)plot.getRenderer();
              CategoryItemLabelGenerator ge = new StandardCategoryItemLabelGenerator("{2}",new DecimalFormat("00.0%"));
              render.setItemLabelGenerator(ge);
              CategoryToolTipGenerator cc = new StandardCategoryToolTipGenerator("{0}-{1}",new DecimalFormat("0.00%"));
              render.setToolTipGenerator(cc);
              return chart;
       }
       public static void main(String[] args) {
              BarChart p = new BarChart();
              JFreeChart chart = p.getChart();
              // 3 显示在GUI
              ChartFrame frame = new ChartFrame("", chart);
              frame.pack();
              frame.setVisible(true);
       }
}
运行结果如下图所示:
 
 
注:JFreeChart的功能比较强大,还有很多细节问题需要进一步研究。
 
 

HTML初步认识

HTML初步认识本篇博客给大家带来html最基础的东西,也就是初步认识html,打算从以下几个方面给大家介绍: 认识什么是纯文本文件txt HTML是负责描述文档语义的语言 HTML骨架和基本语法 可...
  • u010624986
  • u010624986
  • 2016年12月16日 23:46
  • 519

初步认识linux与入门

习惯了使用windows以后接触另外一个操作系统似乎不太习惯,考虑到linux众多优越性,首先就说说为什么学习linux。在接触linux之前先来说说我对linux的理解。1. linux完全开源,免...
  • cai2016
  • cai2016
  • 2016年07月10日 18:27
  • 825

webvr 的初步认识

webvr 的初步认识
  • qq_16090117
  • qq_16090117
  • 2016年05月11日 20:15
  • 724

day 1:对Java的初步认识(对于环境变量的理解等)

Java后端方向的基本就业方向如下几部分:移动互联网、互联网金融、智能家居、互联网教育等等 Java的最大特性:一次编译,到处运行。原因归功于虚拟机JVM机制,JVM虚拟机保证了在不同的平台上可以使用...
  • qq_37366958
  • qq_37366958
  • 2018年01月02日 19:32
  • 58

1.新手关于linux的初步认识

首先,我认识到,linux是一种操作系统,与windows,unix类似。当然,目前最受欢迎的操作系统为unix。我了解到,Linux是unix的一个版本。可谓十分相近,但也有不同之处。主要区别在于u...
  • einsass
  • einsass
  • 2017年02月27日 18:10
  • 87

Linux初步认识

Linux在硬件开发,服务器架设中使用广泛,学习Linux对于未来的职业发展相信会有很大帮助。对于初学者来说学习Linux可能会把握不住方向,同时为了加强自身记忆,在此把我的学习过程记录下来以便未来查...
  • Hulkhaoke
  • Hulkhaoke
  • 2017年06月28日 14:36
  • 200

关于Linux的初步认识

首先,是关于Linux和Unix的关系问题。Linux是基于Unix的. 简单地说,Linux是一套免费使用和自由传播的类Unix操作系统,它主要用于基于Intel x86系列CPU的计算机上。这...
  • wu378798621
  • wu378798621
  • 2017年02月23日 21:48
  • 76

C语言及程序设计基础 课程主页

第一部分 引言及体验 知识点 学习资源 1.1 人人学点程序设计 问卷 1.2 程序设计语言 自测 1.3 搭建C语言的运行平台 实践要求:按视频指导搭建编程环境并运行程...
  • sxhelijian
  • sxhelijian
  • 2015年07月07日 17:06
  • 2529

一、OpenStack入门 之 初步认识

OpenStack入门 之 初步认识写在前面从 OpenStack 基础知识开始学起,剖析 OpenStack 架构,分析 OpenStack 的各个组件的功能、原理和使用方法,通过实战演练来掌握 O...
  • Heartyhu
  • Heartyhu
  • 2016年03月30日 12:59
  • 3599

jfreechart 实现时间曲线图

jfreechart 实现时间曲线图 一、JFreeChart获取。 JFreeChart是JFreeChart公司在开源网站SourceForge.net上的一个项目,该公司的主要产...
  • qq263229365
  • qq263229365
  • 2013年06月13日 21:27
  • 1356
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:初步认识JFreeChart
举报原因:
原因补充:

(最多只允许输入30个字)