1.介紹 JFreeChart是基于Java平臺的免費的圖表庫.它運行在java2(JDK 1.2.2或更高版本)平臺上,并且使用Java 2D API進行制圖。最新的版本是jfreechart-1.0.0-rc1,可以從http://www./jfreechart/下載到。 2.文檔 JFreeChart的API文檔http://www./jfreechart/javadoc/,如果想在本地保存一份的話,一種方法是利用javadoc或者gcjdoc工具直接從源代碼中生成,還有一種方法是使用Ant腳本(Build.xml). 遺憾的是,JFreeChart的開發(fā)文檔(the JFreeChart Developer Guide)是需要付費的(US$39.95),也許這就是關(guān)于JFreeChart的文章比較少的原因吧。 3.依賴的包 (a) JDK 1.2.2或者更高版本. (b) JCommon - version 1.0.0-pre2 or later. (c) GNU JAXP (d) servlet.jar (e) JUnit 除(a)外, 都可以在JFreeChart的jar包里面找到. 4.安裝 5.通過一個簡單的例子,讓我們看看JFreeChart是如何方便的生成我們想要的餅圖的. package tracy.test; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.data.general.DefaultPieDataset; public class PieChart { public void drawToFile(){ //設(shè)置數(shù)據(jù)集 DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("冰箱", 1800); dataset.setValue("電視", 1600); dataset.setValue("空調(diào)", 3300); dataset.setValue("洗衣機", 2000); dataset.setValue("DVD", 400); //通過工廠類生成JFreeChart對象 JFreeChart chart = ChartFactory.createPieChart3D("家電投資比例示意圖", dataset, true, false, false); //寫圖表對象到文件 FileOutputStream fos_jpg = null; try { fos_jpg = new FileOutputStream("D:pi.jpg"); ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,400,300,null); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { fos_jpg.close(); } catch (Exception e) {} } } } 運行后如下圖: 6.設(shè)置顯示方式 上一篇只是對Jfreechart做了一個介紹,下面我們來深入探討Jfreechart的設(shè)置,隨心所欲得到我們想要的圖表。 (本文列出的例子是對前文例子的修改,所以請大家在閱讀本文之前,先閱讀前面的一篇.) 一. 加個副標題 chart.addSubtitle(new TextTitle("2005年度"));
二.對圖表顯示方式的設(shè)置 這就要借助Plot了,對于餅圖的設(shè)置,有相應(yīng)的PiePlot,得到其對象的方法: PiePlot pie = (PiePlot)chart.getPlot(); 下面通過幾個例子,說明PiePlot的幾個常用方法,是如何控制chart發(fā)生變化,達到我們預期效果的. 1. 將指定section的輪廓線設(shè)置成白色 plot.setSectionOutlinePaint(1, Color.WHITE); 2. 設(shè)置餅圖是圓的(true),還是橢圓的(false);默認為true plot.setCircular(false);
plot.setExplodePercent(0, 0.2); 三.百分率問題 什么是百分率問題? 默認狀態(tài)下,標簽和圖例顯示的是"關(guān)鍵字=數(shù)值"的格式。如果我們想標出每個section所占的百分率,那怎么做呢?我想在顯示數(shù)值的同時,顯示單位,又該怎么做呢? 這個問題,還是要借助Plot,只是這是一個大家經(jīng)常遇到的一個問題,所以單獨討論。 設(shè)置標簽使用setLabelGenerator(PieSectionLabelGenerator generator)方法,設(shè)置圖例使用setLegendLabelGenerator(PieSectionLabelGenerator generator)方法 //顯示格式設(shè)置成DEFAULT_TOOLTIP_FORMAT:"{0}: ({1}, {2})" plot.setLabelGenerator(new StandardPieItemLabelGenerator(StandardPieItemLabelGenerator.DEFAULT_TOOLTIP_FORMAT)); //標簽顯示格式設(shè)置成{0}={2} plot.setLabelGenerator(new StandardPieItemLabelGenerator("{0}={2}", NumberFormat.getNumberInstance(), new DecimalFormat("0.0%"))); //圖例顯示格式設(shè)置成{0}: ¥{1},加上單位,更加清楚數(shù)值的含義 plot.setLegendLabelGenerator(new StandardPieItemLabelGenerator("{0}: ¥{1}")); 這里{0}表示"關(guān)鍵字",{1}表示"數(shù)值",{2}表示"百分率" 聲明:JFreeChart版本修訂過程中,類結(jié)構(gòu)出現(xiàn)相當大的變化,本文僅針對jfreechart-1.0.0-rc1. 3. 突出某一部分,及設(shè)置間隔距離.注意此方法僅對2D餅圖有效,3D無效3. |
|