使用JFreeChart来创建图表

一、简介:

JFreeChart是开放源代码站点SourceForge.net上的一个JAVA项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。

为了创建一个可以在web浏览器上查看到图表一般有两种做法:第一种就是使用applet利用java本身对图形的支持来显示一个图表;第二种就是直接在web服务器端生成好图表图片文件后发送给浏览器。

 

二、  JFreeChart中几个核心的对象类:

1、  JFreeChart:图表对象,任何类型的图表的最终表现形式都是在该对象进行一些属性的定制。JFreeChart引擎本身提供了一个工厂类用于创建不同类型的图表对象。

2、  JFreeCDataset:数据集对象,用于提供显示图表所用的数据。根据不同类型的图表对应着很多类型的数据集对象类。

3、  JFreeCPlot:图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要AxisRenderer以及数据集对象的支持。

4、  JFreeCAxis:用于处理图表的两个轴:纵轴和横轴。

5、  JFreeCRenderer:负责如何显示一个图表对象。

6、  JFreeCURLGenerator:用于生成Web图表中每个项目的鼠标点击链接。

7、  JFreeCToolTipGenerator:用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类。

 

三、Demo主要针对饼图、柱状图、线图与复合图四种实现方式的演示,现以饼图的实现作为参考其他三种图形实现方式类似。

准备:首先需要在项目中引入俩个相关的jar包:目前的最新版本是jfreechart-1.0.9.jarjcommon-1.0.12.jar(下载地址http://sourceforge.net/projects/jfreechart/

在实现饼图的时候需要用到org.jfree.chart.plot包中的PiePlot类与PiePlot3D,前者生成的是平面图后者生成3D效果图。

第一种方式是以生成本地图像的方式来实现。首先创建set数据PieDataset集模拟数据,JFreeChart可根据提供的数据生成平面或是3D效果图片,参数有titletitleFontplotcreateLegend,并可通过设置参数titletitleFontcreateLegend来设定图片的标题、标题颜色和是否生成图列,JFreeChart还提供很多其他的方法可执行很多种操作比如setBackgroundPaint();设置背景颜色等等。

最后以输出图片流的方式将图片生成在指定的本地路径上。

代码片段:

 

 

DefaultPieDataset data  =  getDataSet();
PiePlot3D plot 
=   new  PiePlot3D(data);
JFreeChart chart 
=   new  JFreeChart( "" ,JFreeChart.DEFAULT_TITLE_FONT, plot,  true );
chart.setBackgroundPaint(java.awt.Color.white);
chart.setTitle(
" 水果产量图 " );

FileOutputStream fos_jpg 
=   null ;
        
try   {
            fos_jpg 
= new FileOutputStream("E:/饼图.jpg");
            ChartUtilities.writeChartAsJPEG(fos_jpg, 
1.0f, chart, 700500null);
        }
  finally   {
            
try {
                fos_jpg.close();
            }
 catch (Exception e) {
            }

        }

第二种方式使用applet利用java本身对图形的支持来显示一个图表。需要继承org.jfree.ui.ApplicationFrame并引入Javaswingawt包。模拟数据集和设置相关参数都与前种方法类似,只是在生成图片的时候需要用到swing包和awt包。

private   static  JFreeChart createChart(PieDataset dataset)  {
        JFreeChart chart 
= ChartFactory.createPieChart("Pie Chart Demo",            dataset, truetruefalse );
        PiePlot plot 
= (PiePlot) chart.getPlot();
        plot.setSectionOutlinesVisible(
false);
        plot.setLabelFont(
new Font("SansSerif", Font.PLAIN, 10));
        plot.setNoDataMessage(
"No data available");
   plot.setSimpleLabels(
true);
        
return chart;

    }

    
public   static  JPanel createDemoPanel()  {
        JFreeChart chart 
= createChart(createDataset());
        
return new ChartPanel(chart);
    }

    
public   static   void  main(String[] args)  {
        PieChart1 demo 
= new PieChart1("Pie Chart Demo swing");
        demo.pack();
        RefineryUtilities.centerFrameOnScreen(demo);
        demo.setVisible(
true);
}

第三种方式在web服务器端生成好图表图片文件后发送给浏览器,将图片显示在浏览器上。首先搭建web环境,创建servlet继承httpServlet,配置web.xml配置文件

< servlet >
        
< servlet - name > PieChartServlet servlet - name >
        
< servlet - class > PieChartServlet servlet - class >
    
servlet >
    
< servlet - mapping >
        
< servlet - name > PieChartServlet servlet - name >
        
< url - pattern >/ PieChartServlet url - pattern >
    
servlet - mapping >

创建模你数据集和生成图片方法类似,代码片段如下:

public   void  service(ServletRequest req, ServletResponse res)
            
throws  ServletException, IOException  {
            res.setContentType(
"image/jpeg");
            DefaultPieDataset data 
= getDataSet();
            JFreeChart chart 
= ChartFactory.createPieChart3D("水果产量图",
            data,
            
true,
            
false,
            
false
            );
            ChartUtilities.writeChartAsJPEG(res.getOutputStream(),
100,chart,400,300,null);
        }

private   static  DefaultPieDataset getDataSet()  {
            DefaultPieDataset dataset 
= new DefaultPieDataset();
            dataset.setValue(
"苹果",100);
            dataset.setValue(
"梨子",200);
            dataset.setValue(
"葡萄",300);
            dataset.setValue(
"香蕉",400);
            dataset.setValue(
"荔枝",500);
            
return dataset;
        }

 

编译启动tomcat,在浏览器输入http://localhost:8080/PieChartServlet即可在浏览器端生成图片。

 

遇到的问题:

当导入最新版本的来个jarjfreechart-1.0.9.jar的时候,生成的图片略显红色背景,通过设置参数调整背景色不起作用;当将jar包换乘旧版本jfreechart-1.0.1.jar时,此情况解决。

你可能感兴趣的:(使用JFreeChart来创建图表)