服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

使用jfreechart创建图象


  一: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));
  //注意以下代码

扫描关注微信公众号