JFreeChart最新版本1.0.8a的研究系列——生成饼图

来源:互联网 发布:阿尔法编程 加盟 编辑:程序博客网 时间:2024/05/19 06:48

生成饼图

实现步骤

1)创建用于图形生成所要的数据集对象。
实例化类DefaultPieDataset dataset = new DefaultPieDataset()。然后利用DefaultPieDataset类提供的setValue(value1,value2)方法,把从数据存入DefaultPieDataset对象。其中value1是数据名称、value2是数据值。
2)创建图形对象。
实例化JFreeChart chart = ChartFactory.createPieChart3D(title, dataset, true, true, false)createPieChart3D方法是生成3D饼图的方法,createPieChart方法是生成平面饼图的方法。其中title代表图形的标题、dataset就是DefaultPieDataset对象的实例,第一个true表示是否显示图例,第二个true测试下来未明,第三个true为是否显示鼠标指向提示。
3)设置图形显示的属性。
通过Pieplot plot = (PiePlot) chart.getPlot()方法获取plot对象,对图像设置相关属性。
4)生成图形
String filename = ServletUtilities.saveChartAsPNG(JPEG)(chart, 800, 600, info, session);
主要用于把图形对象以图片的形式保存为临时文件。其中的chart就是JFreeChart对象的实例。该方法返回一个文件名。
ChartUtilities.saveChartAsJPEG(new File("D:/Downloads/a.jpg"),chart, 800, 600);
用于把图形对象保存为指定的图片文件,该方法无返回值。

实例应用
package jfreechar.test;
import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.io.IOException;
import java.text.DecimalFormat;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.data.general.DefaultPieDataset;

/**
 * 测试生成饼图实例
 *
 * 
@author 左杰
 *
 
*/

public class PieChartTest {
    
/**
     * 创建Dataset,用数据源中的数据填充
     *
     * 
@return
     
*/

    
public DefaultPieDataset getData() {
        DefaultPieDataset dataset 
= new DefaultPieDataset();
        dataset.setValue(
"短信"10);
        dataset.setValue(
"上网"20);
        dataset.setValue(
"本地通话"30);
        dataset.setValue(
"长途"50);
        
return dataset;
    }


    
/**
     * 创建图表主对象JFreechart,并设置图像显示
     *
     * 
@return
     
*/

    
public JFreeChart createPieChart() {
        
// 创建图表主对象JFreechart
        JFreeChart chart = ChartFactory.createPieChart("话费统计", getData(), true,
                
truetrue);
        
//创建3D状图像
        
//JFreeChart chart = ChartFactory.createPieChart3D("话费统计", getData(), true,
        
//        true, true);
        
//设置图像的背景颜色
        chart.setBackgroundPaint(Color.pink);
        
//边界线条是否可见
        chart.setBorderVisible(false);

        
// 设置图形显示属性
        
// 获得图表显示对象,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%")));
        
// 分离图形,只对平面图有效,3D的不可以
        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.setSectionOutlinesVisible(false);
        
//设置图形区域背景颜色
        plot.setBackgroundPaint(Color.white);
        
return chart;
    }


       
/**
     * 生成图形,保存图像到临时文件,并返回文件名
     * 
     * 
@param chart
     *            JFreeChart对象实例
     * 
@param w
     *            图像宽度
     * 
@param h
     *            图像高度
     * 
@param session           
     *            会话session
     * 
@return
     
*/

    
public String getFileName(JFreeChart chart, int w, int h,HttpSession session) {
        
// 生成图形,保存图像到临时文件,并返回文件名
        String fileName = "";
        StandardEntityCollection sec 
= new StandardEntityCollection();
        ChartRenderingInfo info 
= new ChartRenderingInfo(sec);
        
try {
            fileName 
= ServletUtilities.saveChartAsPNG(chart, w, h, info, session);
        }
 catch (Exception e) {
            System.out.println(
"Exception - " + e.toString());
            fileName 
= "public_error_500x300.png";
        }

        
return fileName;
    }


    
/**
     * 生成图形,保存到指定文件,文件类型为png
     *
     * 
@param fileName
     *            指定保存文件的路径及文件名
     * 
@param chart
     *            JFreeChart对象实例
     * 
@param w
     *            图像宽度
     * 
@param h
     *            图像高度
     
*/

    
public void SaveFileAsPNG(String fileName, JFreeChart chart, int w, int h) {
        
// 生成图形,保存到指定文件,文件类型为png
        try {
            ChartUtilities.saveChartAsPNG(
new File(fileName), chart, w, h);
        }
 catch (IOException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }

    }


    
/**
     * 生成图形,保存到指定文件,文件类型为jpg
     *
     * 
@param fileName
     *            指定保存文件的路径及文件名
     * 
@param chart
     *            JFreeChart对象实例
     * 
@param w
     *            图像宽度
     * 
@param h
     *            图像高度
     
*/

    
public void SaveFileAsJPEG(String fileName, JFreeChart chart, int w, int h) {
        
// 生成图形,保存到指定文件,文件类型为jpg
        try {
            ChartUtilities.saveChartAsPNG(
new File(fileName), chart, w, h);
        }
 catch (IOException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }

    }


    
public static void main(String[] args) {
        PieChartTest p 
= new PieChartTest();
        JFreeChart chart 
= p.createPieChart();
        
//保存为图像文件
        p.SaveFileAsPNG("d://piechat.png", chart, 800600);
        
// 显示在GUI上
        ChartFrame frame = new ChartFrame("话费", chart);
        frame.pack();
        frame.setVisible(
true);
    }

}
这个执行后显示的是平面饼图,如果想实现3D饼图,只需要在创建JFreeChart对象时使用ChartFactory.createPieChart3D方法。
运行结果如下:
平面饼图 3D饼图
 还有很多相关的属性,大家可以研究一下
原创粉丝点击