入门使用JFreeChart知识
入门使用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