您的位置:首页 > 其它

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

2008-01-05 14:47 483 查看

生成饼图

实现步骤

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,


true, true);


//创建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, 800, 600);


// 显示在GUI上


ChartFrame frame = new ChartFrame("话费", chart);


frame.pack();


frame.setVisible(true);


}


}

这个执行后显示的是平面饼图,如果想实现3D饼图,只需要在创建JFreeChart对象时使用ChartFactory.createPieChart3D方法。
运行结果如下:

平面饼图 3D饼图


还有很多相关的属性,大家可以研究一下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐