生成饼图
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 DefaultPieDatasetgetData() ... { DefaultPieDatasetdataset = new DefaultPieDataset(); dataset.setValue( " 短信 " , 10 ); dataset.setValue( " 上网 " , 20 ); dataset.setValue( " 本地通话 " , 30 ); dataset.setValue( " 长途 " , 50 ); return dataset; } /***/ /** *创建图表主对象JFreechart,并设置图像显示 * *@return */ public JFreeChartcreatePieChart() ... { // 创建图表主对象JFreechart JFreeChartchart = ChartFactory.createPieChart( " 话费统计 " ,getData(), true , true , true ); // 创建3D状图像 // JFreeChartchart=ChartFactory.createPieChart3D("话费统计",getData(),true, // true,true); // 设置图像的背景颜色 chart.setBackgroundPaint(Color.pink); // 边界线条是否可见 chart.setBorderVisible( false ); // 设置图形显示属性 // 获得图表显示对象,3D状的 // PiePlot3Dplot=(PiePlot3D)chart.getPlot(); // 获得图表显示对象 PiePlotplot = (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 StringgetFileName(JFreeChartchart, int w, int h,HttpSessionsession) ... { // 生成图形,保存图像到临时文件,并返回文件名 StringfileName = "" ; StandardEntityCollectionsec = new StandardEntityCollection(); ChartRenderingInfoinfo = new ChartRenderingInfo(sec); try ... { fileName = ServletUtilities.saveChartAsPNG(chart,w,h,info,session); } catch (Exceptione) ... { 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(StringfileName,JFreeChartchart, int w, int h) ... { // 生成图形,保存到指定文件,文件类型为png try ... { ChartUtilities.saveChartAsPNG( new File(fileName),chart,w,h); } catch (IOExceptione) ... { // TODOAuto-generatedcatchblock e.printStackTrace(); } }/***/ /** *生成图形,保存到指定文件,文件类型为jpg * *@param fileName *指定保存文件的路径及文件名 * @param chart *JFreeChart对象实例 * @param w *图像宽度 * @param h *图像高度 */ public void SaveFileAsJPEG(StringfileName,JFreeChartchart, int w, int h) ... { // 生成图形,保存到指定文件,文件类型为jpg try ... { ChartUtilities.saveChartAsPNG( new File(fileName),chart,w,h); } catch (IOExceptione) ... { // TODOAuto-generatedcatchblock e.printStackTrace(); } }public static void main(String[]args) ... { PieChartTestp = new PieChartTest(); JFreeChartchart = p.createPieChart(); // 保存为图像文件 p.SaveFileAsPNG( " d://piechat.png " ,chart, 800 , 600 ); // 显示在GUI上 ChartFrameframe = new ChartFrame( " 话费 " ,chart); frame.pack(); frame.setVisible( true ); } }
这个执行后显示的是平面饼图,如果想实现3D饼图,只需要在创建JFreeChart对象时使用ChartFactory.createPieChart3D方法。
运行结果如下:
平面饼图 3D饼图
<!-- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"> <rdf:Description rdf:about="http://192.168.0.26/pages/viewpage.action?pageId=4882499" dc:identifier="http://192.168.0.26/pages/viewpage.action?pageId=4882499" dc:title="生成饼图" trackback:ping="http://192.168.0.26/rpc/trackback/4882499" /> </rdf:RDF> --><!-- Root decorator: all decisions about how a page is to be decorated via the inline decoration begins here. --><!-- Switch based upon the context. However, for now, just delegate to a decorator identified directly by the context. -->