入门使用JFreeChart知识
JFreeChart 入门与使用
<script type="text/javascript"><!-- google_ad_client = "pub-3804432954034391"; google_ad_width = 728; google_ad_height = 90; google_ad_format = "728x90_as"; google_ad_type = "text_image"; google_ad_channel = ""; //--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>一、下载
到http://www.jfree.org/网站可以获得最新的版本 下面以JFREECHART: Version 1.0.2为例子来讲述二、解压
我们需要从解压文件中找到必需的开发包即可。 让我们来阅读一下它的Readme文件: (a) JDK 1.3.1 or higher (b) JCommon - version 1.0.0 or later. - jcommon-1.0.5.jar 这个在解压目录lib里面已经有1.0.5版,不过你也可以在jfree网站指引下下载最新的版本。 (c) GNU JAXP - gnujaxp.jar 在org.jfree.data.xml包中的类需要用到这个库, 或者其他兼容 JAXP v1.1 的分析器. 但是有一点要说明:只有在你使用JDK1.3的情况下才需要这个库。 (d) servlet.jar 如果你需要用到org.jfree.chart.servlet包中的类的时候,就需要这个库。 如果你用于web开发,这个库一般都会随web开发工具或者服务器发布。不需要额外添加。 (e) JUnit 当你需要用于用到JUnit测试时才要求这个库。三、建立项目
使用Eclipse建立一个Java Project,命名为"charttest" * JRE 1.5 * 源路径 src/jfreechart * 目标路径 WebContent/WEB-INF/class 把$JFREECHART/lib下面的jcommon-1.0.5.jar,jfreechart-1.0.2.jar,junit.jar 复制到WebContent/WEB-INF/lib目录下,然后在构建路径(Build Path)中添加上述path如果您的JRE并不包含servlet.jar,那么你还需要把servlet.jar添加到构建路径(Build Path)中。
四、测试
还是采取“C2C”的手法,什么是C2C? 这是外国朋友赐予我们中国人高超的编程技巧的美誉“Copy To China”. 搜索到ibm网站有一篇文章,刘冬的“使用 JFreeChart来创建基于web的图表”,摘取片断并修改用于测试。4.1 柱状图
把下面代码粘贴到你新建的类BarChartDemo中,选择菜单Run as -> Java Application 即可看到输出文件D:/fruit.jpg. 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.chart.plot.PlotOrientation; import org.jfree.data.category.CategoryDataset; import org.jfree.data.category.DefaultCategoryDataset;/**
* 该类用于演示最简单的柱状图生成 * @author Winter Lau * @modifier Samland Leung */public class BarChartDemo {
public static void main(String[] args) throws IOException{CategoryDataset dataset = getDataSet2();
JFreeChart chart = ChartFactory.createBarChart3D( "水果产量图", // 图表标题 "水果", // 目录轴的显示标签 "产量", // 数值轴的显示标签 dataset, // 数据集 PlotOrientation.VERTICAL, // 图表方向:水平、垂直 true, // 是否显示图例(对于简单的柱状图必须是false) false, // 是否生成工具 false // 是否生成URL链接 ); FileOutputStream fos_jpg = null; try { fos_jpg = new FileOutputStream("D://fruit.jpg"); ChartUtilities.writeChartAsJPEG(fos_jpg,0.8f,chart,400,300,null); } finally { try { fos_jpg.close(); } catch (Exception e) { System.out.println(e.getMessage()); } } } /** * 获取一个演示用的组合数据集对象 * @return */ private static CategoryDataset getDataSet2() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(100, "北京", "苹果"); dataset.addValue(100, "上海", "苹果"); dataset.addValue(100, "广州", "苹果"); dataset.addValue(200, "北京", "梨子"); dataset.addValue(200, "上海", "梨子"); dataset.addValue(200, "广州", "梨子"); dataset.addValue(300, "北京", "葡萄"); dataset.addValue(300, "上海", "葡萄"); dataset.addValue(300, "广州", "葡萄"); dataset.addValue(400, "北京", "香蕉"); dataset.addValue(400, "上海", "香蕉"); dataset.addValue(400, "广州", "香蕉"); dataset.addValue(500, "北京", "荔枝"); dataset.addValue(500, "上海", "荔枝"); dataset.addValue(500, "广州", "荔枝"); return dataset; }}
4.2 饼图 /** * 用于演示饼图的生成 * @author Winter Lau * @modifier Samland Leung */ public class PieChartDemo {public static void main(String[] args) throws IOException{
DefaultPieDataset data = getDataSet(); JFreeChart chart = ChartFactory.createPieChart3D("水果产量图", // 图表标题 data, true, // 是否显示图例 false, false ); //写图表对象到文件,参照柱状图生成源码 FileOutputStream fos_jpg = null; try { fos_jpg = new FileOutputStream("D://fruit.png"); ChartUtilities.writeChartAsPNG(fos_jpg,chart,400,300,null); } finally { try { fos_jpg.close(); } catch (Exception e) { System.out.println(e.getMessage()); } } } /** * 获取一个演示用的简单数据集对象 * @return */ 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; } }五、解说
要建立一個JFreeChart的圖形主要有三個步驟 1.建立一個擁有資料的DataSet 2.用DataSet創造JFreeChart *.對JFreeChart作一些自訂的設計 3.顯示JFreeChart下面也是“C2C”回来的一段代码:
public HelloBarChart(){ CategoryDataset dataset = createDataset(); //1.建立一個擁有資料的DataSet JFreeChart chart = createChart(dataset); //2.用DataSet創造JFreeChart chart = customizeChart(chart); //*.對JFreeChart作一些自訂的設計 ChartPanel chartPanel = new ChartPanel(chart); //3.顯示JFreeChart chartPanel.setPreferredSize(new Dimension(500, 270)); getContentPane().add(chartPanel);pack();
setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }private CategoryDataset createDataset(){
// row keys... String series1 = "First"; String series2 = "Second"; String series3 = "Third";// column keys...
String category1 = "Category 1"; String category2 = "Category 2"; String category3 = "Category 3"; String category4 = "Category 4"; String category5 = "Category 5";// create the dataset...
DefaultCategoryDataset dataset = new DefaultCategoryDataset();dataset.addValue(1.5, series1, category1);
dataset.addValue(4.2, series1, category2); dataset.addValue(3.0, series1, category3); dataset.addValue(5.0, series1, category4); dataset.addValue(5.0, series1, category5);dataset.addValue(5.5, series2, category1);
dataset.addValue(7.8, series2, category2); dataset.addValue(6.0, series2, category3); dataset.addValue(8.0, series2, category4); dataset.addValue(4.0, series2, category5);dataset.addValue(4.0, series3, category1);
dataset.addValue(3.0, series3, category2); dataset.addValue(2.0, series3, category3); dataset.addValue(3.0, series3, category4); dataset.addValue(6.0, series3, category5);return dataset;
}private JFreeChart createChart(final CategoryDataset dataset){
JFreeChart chart = ChartFactory.createBarChart( "Hello Bar Chart", // chart title "Category", // domain axis label "Value", // range axis label dataset, // data PlotOrientation.VERTICAL, // orientation true, // include legend true, // tooltips? false // URLs? ); return chart; }private JFreeChart customizeChart(final JFreeChart chart){
return chart; } }参考资料:
http://www-128.ibm.com/developerworks/cn/java/l-jfreechart/ http://www.ice.ntnu.edu.tw/~swanky/jfreechart/BarChart.htm http://www.cnweblog.com/sundy/archive/2005/08/12/24480.aspx