初步认识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
:图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要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的功能比较强大,还有很多细节问题需要进一步研究。
 
 
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

初步认识JFreeChart

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭