一:jfreechart介绍
jfreechart是一个免费创建图片的java工具.可以创建如下图形:
饼图(pie charts;)
曲线图(line charts )
柱状图(horizontal/vertical bar charts)
甘特图(gantt charts; )
xy plots and scatter plots;
time series, high/low/open/close charts and candle stick charts;
combination charts;
pareto charts;
bubble charts;
wind plots, meter charts and symbol charts;
从以下地址可以看到jfreechart可以创建的图形类型
http://www.jfree.org/jfreechart/samples.html
sourceforge有一个基于jfreechart的项目cewolf可以很方便的在jsp/servlet中创建图片
jfreechart目前(2003-05-08)版本为0.98
希望得到详细的信息或下载jfreechart请访问如下站点:
http://www.jfree.org/jfreechart /
二:特别说明:
jfreechart是一个开源项目,但是文档是需要40美金去购买的。
还有一个很重要的问题,jfreechart如果使用中文,他使用的默认字体
显示出来的中文会很模糊,你可能需要修改源代码。
下面我就举几个简单的例子说明一下如何使用jfreechart创建图片
在开发中有可能会导入以下的类
import com.jrefinery.chart.chartfactory;
import com.jrefinery.chart.chartutilities;
import com.jrefinery.chart.jfreechart;
import com.jrefinery.chart.texttitle;
import com.jrefinery.chart.axis.numberaxis;
import com.jrefinery.chart.plot.categoryplot;
import com.jrefinery.chart.plot.pieplot;
import com.jrefinery.data.day;
import com.jrefinery.data.defaultcategorydataset;
import com.jrefinery.data.defaultpiedataset;
import com.jrefinery.data.timeseries;
import com.jrefinery.data.timeseriescollection;
import com.jrefinery.data.timeseriesdatapair;
在0.98以后包由com.jrefinery.*改变为:org.jfree
三:创建饼图
//图片标题
string title = "空调2002年市场占有率";
//设定数据源
defaultpiedataset piedata = new defaultpiedataset();
//第一个参数为名称,第二个参数是double数
piedata.setvalue("联想", 27.3);
piedata.setvalue("长城", 12.2);
piedata.setvalue("海尔", 5.5);
piedata.setvalue("美的", 17.1);
piedata.setvalue("松下", 9.0);
piedata.setvalue("科龙", 19.0);
//创建jfreechart,都使用chartfactory来创建jfreechart,很标准的工厂设计模式
jfreechart chart =
chartfactory.createpiechart(title, piedata, true, true, true);
//设定图片标题
chart.settitle(new texttitle(title, new font("隶书", font.italic, 15)));
//chart.addsubtitle(new texttitle("2002财年分析", new font("隶书", font.italic, 12)));
//设定背景
chart.setbackgroundpaint(color.white);
//chart.s
//饼图使用一个pieplot
pieplot pie = (pieplot)chart.getplot();
//pie.setsectionlabeltype(pieplot.name_and_percent_labels);
pie.setsectionlabeltype(pieplot.name_and_value_labels);
//设定显示格式(名称加百分比或数值)
pie.setpercentformatstring("#,###0.0#%");
//设定百分比显示格式
pie.setbackgroundpaint(color.white);
pie.setsectionlabelfont(new font("黑体", font.truetype_font, 12));
//设定背景透明度(0-1.0之间)
pie.setbackgroundalpha(0.6f);
//设定前景透明度(0-1.0之间)
pie.setforegroundalpha(0.90f);
//输出文件到指定目录
string rfname = mathutil.getroundcode(12) + ".jpeg";
string filename = "d:/test/" + rfname;
try {
//可以保存文件为jpg或png格式。
chartutilities.savechartasjpeg(new file(filename), 100, chart, 600, 600);
//第一个参数为文件名
//第二个参数质量
//第三个参数为哪个chart创建图片
//第四个宽度
//第五个高度
} catch (ioexception exz) {
system.out.print("....cant’t create image file");
}
其实使用jfreechart创建图片很简单,不同的的图片类型区别在于设置数据集
四:创建曲线图
// create a default chart based on some sample data...
//曲线图标题
string title = "趋势分析";
//曲线图x轴提示
string domain = "月份走势";
//曲线图y轴提示
string range = "应收余额";
//曲线图自标题
string subtitlestr = "2003财年分析";
//创建时间数据源
//每一个timeseries在图上是一条曲线
timeseries ca = new timeseries("用友");
for (int i = 1999; i < 2005; i++) {
for (int mon = 0; mon < 12; mon++) {
//ca.add(new month(mon + 1, i), new double(500 + math.random() * 100));
//timeseriesdatapair是一个时间点的数值体现
ca.add(
new timeseriesdatapair(
new day(1, mon + 1, i),
new double(500 + math.random() * 100)));
}
}
timeseries ibm = new timeseries("金碟");
for (int i = 1999; i < 2005; i++) {
for (int mon = 0; mon < 12; mon++) {
//ibm.add(new month(mon+1,i),new double(400-math.random()*100));
ibm.add(
new timeseriesdatapair(
new day(1, mon + 1, i),
new double(400 - math.random() * 100)));
}
}
timeseries king = new timeseries("东软");
for (int i = 1999; i < 2005; i++) {
for (int mon = 0; mon < 12; mon++) {
//ibm.add(new month(mon+1,i),new double(400-math.random()*100));
king.add(
new timeseriesdatapair(
new day(1, mon + 1, i),
new double(300 - math.random() * 100)));
}
}
//时间曲线数据集合
timeseriescollection dataset = new timeseriescollection();
dataset.addseries(ca);
dataset.addseries(ibm);
dataset.addseries(king);
//dataset.addseries(jpy);
//dataset.addseries(mav);
//时间曲线元素
jfreechart chart =
chartfactory.createtimeserieschart(
title,
domain,
range,
dataset,
true,
true,
false);
// then customise it a little...
texttitle subtitle =
new texttitle(subtitlestr, new font("黑体", font.bold, 12));
chart.addsubtitle(subtitle);
chart.settitle(new texttitle(title, new font("隶书", font.italic, 15)));
//pie.setserieslabelfont(new font("黑体", font.bold, 15));
chart.setbackgroundpaint(
new gradientpaint(0, 0, color.white, 0, 1000, color.blue));
//sysout
//输出文件到指定目录
string rfname = mathutil.getroundcode(22) + ".jpeg";
string filename = "d:/test/" + rfname;
try {
//for
//system.out.println();
chartutilities.savechartasjpeg(new file(filename), 100, chart, 600, 600);
// log.info("....create image file:" + filename);
} catch (ioexception exz) {
system.out.print("....cant’t create image file");
}
五:创建柱状图
string title = "柱状图测试";
string domain = "单位比较";
string range = "数值";
//categorydataset data = demodatasetfactory.createcategorydataset();
defaultcategorydataset data = new defaultcategorydataset();
for (int r = 0; r < 5; r++) {
string rowkey = "单位 [" + (r + 1)+"]" ;
//第一层循环:分析对象
for (int c = 0; c < 6; c++) {
//第二层循环:分析对象在时间点上的数据
string columnkey = "2001年" + (c + 1) + "月";
data.addvalue(new double(r * c + 5), rowkey, columnkey);
}
}
jfreechart chart =
chartfactory.createverticalbarchart(
title,
domain,
range,
data,
true,
true,
false);
// then customise it a little...
chart.setbackgroundpaint(
new gradientpaint(0, 0, color.white, 1000, 0, color.red));
chart.settitle(new texttitle(title, new font("隶书", font.italic, 15)));
categoryplot plot = (categoryplot)chart.getplot();
plot.setforegroundalpha(0.9f);
plot.setvaluelabelfont(new font("黑体", font.truetype_font, 12));
//plot.setsectionlabelfont(new font("黑体", font.truetype_font, 12));
//注意以下代码
闽公网安备 35060202000074号