今天学习一下JFreeChat
准备工作下载包
JFreeChart主页:http://www.jfree.org/jfreechart/index.html
JFreeChart下载页面:http://sourceforge.net/projects/jfreechart/
然后写个简单的测试类
package com.ll.JFreeChat.Demo1;
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 Mr liu
*/
public class Demo1 {
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,100,chart,400,300,null);
}finally{
try{
fos_jpg.close();
}catch(Exception e){}
}
}
/**
* 获取一个演示用的简单数据集对象
* @return
*/
private static CategoryDataset getDataSet(){
DefaultCategoryDataset dataset=new DefaultCategoryDataset();
dataset.addValue(100, null, "苹果");
dataset.addValue(200, null, "梨子");
dataset.addValue(300, null, "葡萄");
dataset.addValue(400, null, "香蕉");
dataset.addValue(500, null, "栗子");
return dataset;
}
/**
* 获取一个演示用的组合数据集对象
* @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;
}
}
写了一个很简单的案例,但出现了几个问题
问题一
The 'quality' must be in the range 0.0f to 1.0f
报这样的错误,如何改正呢
这是因为ChartUtilities.writeChartAsJPEG(res.getOutputStream(),100,chart,graphWidth,graphHigh,null);
限制quality必须小于等于1,所以修改一下
把100改成 1.0f就可以显示了
问题二
生成的图,汉字不显示
这个和JFreeChat的版本有关系,我之前用的是1.0.16,换成1.0.7就可以了,其它版本应该也可以,自己多试试
问题三
我把CategoryDataset dataset=getDataSet();换成第一个数据集,结果就报这样的错误
Exception in thread "main" java.lang.IllegalArgumentException: Null 'key' argument.
其实很简单就是我这里面有的数据是null,它不允许,改成"",就可以了