初步认识JFreeChart

初步走进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
:图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要 Axis Renderer 以及数据集对象的支持
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.jar gnujaxp.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 的功能比较强大,还有很多细节问题需要进一步研究。
 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值