求助!急!小女子先谢过了!UP者有分! 关注&&&&&&&&&&& 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.javaworld.com/javaworld/jw-12-2002/jw-1227-opensourceprofile.html jFreeChart初探 jFreeChart也许对大家来说很陌生,她是一款免费的、功能强大的统计图生成工具,可以直接生成PNG,JPG等各式的文件为我们java项目的开发增加了一部利器。她的英文简介JFreeChart is a free Java class library for generating charts, including: pie charts; line charts and horizontal/vertical bar charts (regular and stacked, with optional 3D-effect); XY plots and scatter plots; time series, high/low/open/close charts and candle stick charts; combination charts; Pareto charts; Gantt charts; bubble charts; wind plots, meter charts and symbol charts; 正好我最近的一个项目用到她,于是就很粗略的看了一下,现在把它拿出来和大家分享,希望对大家的工作有所帮助。本文主要是讲解她在jsp上面的应用。例子采用jsp+javaBean结构实现准备工作:首先我们需要什么?当然是jFreeChart的package了,可以在她的官方网站上面找到下载链接http://www.jfree.org/jfreechart/,把包下下来,配置到tomcat当中,然后可以开始我们的Jfreechart之旅了。下面我要做的是一个饼状统计图,首先建立javaBean文件文件名:Tryitshow.javapackage com.tryit;import java.io.*;import java.awt.Insets;import java.awt.Font;import java.io.PrintWriter;import java.text.SimpleDateFormat;import java.util.Iterator;import java.util.Locale;import java.text.NumberFormat;import javax.servlet.http.HttpSession;import org.jfree.data.*;import org.jfree.chart.*;import org.jfree.chart.axis.*;import org.jfree.chart.renderer.VerticalBarRenderer;import org.jfree.chart.renderer.StandardXYItemRenderer;import org.jfree.chart.plot.*;import org.jfree.chart.entity.*;import org.jfree.chart.tooltips.*;import org.jfree.chart.urls.*;import org.jfree.chart.servlet.*;import org.jfree.chart.TextTitle;import java.net.URL;public class Tryitshow{public static String generatePieChart(String infoStr, String titles,HttpSession session, PrintWriter pw){String filename = null;Font font;try {// 建立PieDataSetDefaultPieDataset data = new DefaultPieDataset();String ss[]=infoStr.split(",");for (int n=0;n<ss.length;n++){String ssPart[]=ss[n].split("#");int tt=Integer.parseInt(ssPart[1]);String mm=ssPart[0];data.setValue(mm,tt);}// 生成chart物件PiePlot plot = new PiePlot(data);plot.setInsets(new Insets(0, 5, 5, 5));plot.setToolTipGenerator(new StandardPieToolTipGenerator());font=new Font("黑体",Font.CENTER_BASELINE,20);//这个地方是设置统计图标题的字体和大小JFreeChart chart = new JFreeChart("",JFreeChart.DEFAULT_TITLE_FONT, plot, true);TextTitle tt=new TextTitle(titles);tt.setFont(font);chart.setBackgroundPaint(java.awt.Color.white);//统计图片的底色chart.setTitle(tt);// 把生成的文件写入到临时的目录中ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session);//选择存储成png格式的文件,当然你也可以使用saveChartAsJPEG的方法生成jpg图片// 把image map 写入到 PrintWriterChartUtilities.writeImageMap(pw, filename, info);pw.flush();}catch (Exception ex) {System.out.println("error:"+ex.getMessage());}return filename;}}接着是jsp文件<%@ page contentType="text/html;charset=gb2312"%><%@ page import = "com.tryit.Tryitshow" %><%@ page import = "java.io.PrintWriter" %><%@ page import = "java.text.SimpleDateFormat" %><%@ page import = "java.text.ParseException" %><%@ page import = "java.util.ArrayList" %><%@ page import = "java.util.Date" %><%@ page import = "java.util.Iterator" %><%@ page import = "java.util.Locale" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><TITLE> New Document </TITLE><META NAME="Generator" CONTENT="EditPlus"><META NAME="Author" CONTENT=""><META NAME="Keywords" CONTENT=""><META NAME="Description" CONTENT=""></HEAD><%String filename = Tryitshow.generatePieChart("本科#100,专科#200","人才学历信息统计",session, new PrintWriter(out));String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;%><BODY><img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= filename %>"></BODY></HTML>ok,大功告成,当然,你可以采用其他方式,比如你可以把DataSet的数据设置在xml文件中,从xml文件读取统计数据中添加百分比等等,还可以选择生成柱状图、折线图等。jFreeChart还有很多其他的用法,希望大家可以多多交流。web.xml文件的配置<web-app><servlet><servlet-name>DisplayChart</servlet-name><servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class></servlet><servlet-mapping><servlet-name>DisplayChart</servlet-name><url-pattern>/servlet/DisplayChart</url-pattern></servlet-mapping></web-app> 一: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.htmlsourceforge有一个基于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));//注意以下代码NumberAxis verticalAxis = (NumberAxis)plot.getRangeAxis();verticalAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());// 输出文件到指定目录String rfname = MathUtil.getRoundCode(22) + "b.jpeg";String fileName = "d:/test/" + rfname;try {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");}六:结束语个人感觉JFreeChart可以满足大部分图片创建的需要,美中不足的是:对字体的设置做的不够好,特别是使用中文的时候字体很不清晰。因为这个原因建议你自己去修改他的源代码最好使用properties文件去设置字体.还有就是文档要钱所以要多花点时间去看源代码。或多上社区.因为时间等原因我只介绍了三种图片的创建,其他类型的图片可以参考jfreechart提供的例子。 SDK的demo里有一个是3D旋转的框架图形,也许对你会有帮助。 非常感谢各位的支持,:)对于jfreechart,我也在研究中,谢谢! handsomeghost(方鸿渐) 发的帖子我看了,顶一下 jdk自带的类库中不是有吗?汽车飞机大炮都能画,还有什么画不了的?在jdk目录中搜索一下 *.html。挨个看看哪个是你需要的,然后还能看到源代码。 同意hx9111,一看主题‘小女子’,好像是男人的全上来了:>不过这也反映了一个现象:在这里小女子真的太少了,呵! Hibernate2 Like搜索Query#list()速度奇慢的怪问题 @@@@@@ help me 请大家给我出出主意呀,今天面试又被打击呀. java问题?? 一个关于package,公共类的问题。。。 求高手帮忙 在线等 急啊 新手求助关于final类的问题多谢各位!! Applet不能显示?急啊,有高手吗? 新手求教关于引入类的问题! 请问直接打印一个对象是什么意思?谢谢 发现Sun官方的教程非常棒 关于request.setAttribute()和request.getAttribute()的用法求助
jFreeChart也许对大家来说很陌生,她是一款免费的、功能强大的统计图生成工具,可以直接生成PNG,JPG等各式的文件
为我们java项目的开发增加了一部利器。她的英文简介
JFreeChart is a free Java class library for generating charts, including:
pie charts;
line charts and horizontal/vertical bar charts (regular and stacked, with optional 3D-effect);
XY plots and scatter plots;
time series, high/low/open/close charts and candle stick charts;
combination charts;
Pareto charts;
Gantt charts;
bubble charts;
wind plots, meter charts and symbol charts; 正好我最近的一个项目用到她,于是就很粗略的看了一下,现在把它拿出来和大家分享,希望对大家的工作有所
帮助。本文主要是讲解她在jsp上面的应用。例子采用jsp+javaBean结构实现准备工作:首先我们需要什么?当然是jFreeChart的package了,可以在她的官方网站上面找到下载链接
http://www.jfree.org/jfreechart/,把包下下来,配置到tomcat当中,然后可以开始我们的Jfreechart之旅
了。下面我要做的是一个饼状统计图,首先建立javaBean文件文件名:Tryitshow.javapackage com.tryit;import java.io.*;
import java.awt.Insets;
import java.awt.Font;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Iterator;
import java.util.Locale;
import java.text.NumberFormat;
import javax.servlet.http.HttpSession;
import org.jfree.data.*;
import org.jfree.chart.*;
import org.jfree.chart.axis.*;
import org.jfree.chart.renderer.VerticalBarRenderer;
import org.jfree.chart.renderer.StandardXYItemRenderer;
import org.jfree.chart.plot.*;
import org.jfree.chart.entity.*;
import org.jfree.chart.tooltips.*;
import org.jfree.chart.urls.*;
import org.jfree.chart.servlet.*;
import org.jfree.chart.TextTitle;
import java.net.URL;public class Tryitshow
{
public static String generatePieChart(String infoStr, String titles,HttpSession session, PrintWriter pw)
{
String filename = null;
Font font;try {
// 建立PieDataSet
DefaultPieDataset data = new DefaultPieDataset();
String ss[]=infoStr.split(",");
for (int n=0;n<ss.length;n++)
{
String ssPart[]=ss[n].split("#");
int tt=Integer.parseInt(ssPart[1]);
String mm=ssPart[0];
data.setValue(mm,tt);
}// 生成chart物件
PiePlot plot = new PiePlot(data);
plot.setInsets(new Insets(0, 5, 5, 5));plot.setToolTipGenerator(new StandardPieToolTipGenerator());font=new Font("黑体",Font.CENTER_BASELINE,20);//这个地方是设置统计图标题的字体和大小JFreeChart chart = new JFreeChart("",JFreeChart.DEFAULT_TITLE_FONT, plot, true);TextTitle tt=new TextTitle(titles);
tt.setFont(font);
chart.setBackgroundPaint(java.awt.Color.white);//统计图片的底色
chart.setTitle(tt);// 把生成的文件写入到临时的目录中
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session);
//选择存储成png格式的文件,当然你也可以使用saveChartAsJPEG的方法生成jpg图片// 把image map 写入到 PrintWriter
ChartUtilities.writeImageMap(pw, filename, info);
pw.flush();
}
catch (Exception ex) {
System.out.println("error:"+ex.getMessage());
}
return filename;
}
}
接着是jsp文件
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import = "com.tryit.Tryitshow" %>
<%@ page import = "java.io.PrintWriter" %>
<%@ page import = "java.text.SimpleDateFormat" %>
<%@ page import = "java.text.ParseException" %>
<%@ page import = "java.util.ArrayList" %>
<%@ page import = "java.util.Date" %>
<%@ page import = "java.util.Iterator" %>
<%@ page import = "java.util.Locale" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<%
String filename = Tryitshow.generatePieChart("本科#100,专科#200","人才学历信息统计",session, new PrintWriter(out));String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
%>
<BODY>
<img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= filename %>">
</BODY>
</HTML>ok,大功告成,当然,你可以采用其他方式,比如你可以把DataSet的数据设置在xml文件中,从xml文件读取
统计数据中添加百分比等等,还可以选择生成柱状图、折线图等。jFreeChart还有很多其他的用法,希望大家可以多多交流。
web.xml文件的配置<web-app>
<servlet>
<servlet-name>DisplayChart</servlet-name>
<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DisplayChart</servlet-name>
<url-pattern>/servlet/DisplayChart</url-pattern>
</servlet-mapping>
</web-app>
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));
//注意以下代码
NumberAxis verticalAxis = (NumberAxis)plot.getRangeAxis();
verticalAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
// 输出文件到指定目录
String rfname = MathUtil.getRoundCode(22) + "b.jpeg";
String fileName = "d:/test/" + rfname;
try {
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");
}六:结束语
个人感觉JFreeChart可以满足大部分图片创建的需要,美中不足的是:对字体的设置做的
不够好,特别是使用中文的时候字体很不清晰。因为这个原因建议你自己去修改他的源代码
最好使用properties文件去设置字体.还有就是文档要钱所以要多花点时间去看源代码。或多
上社区.因为时间等原因我只介绍了三种图片的创建,其他类型的图片可以参考jfreechart提
供的例子。
对于jfreechart,我也在研究中,谢谢!
在jdk目录中搜索一下 *.html。挨个看看哪个是你需要的,然后还能看到源代码。
不过这也反映了一个现象:在这里小女子真的太少了,呵!