JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications,applets, servlets 以及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(barcharts)、散点图(scatter plots)、时序图(time series)、甘特图(Ganttcharts)等等多种图表,并且可以产生PNG和JPEG格式的输出,还可以与PDF和EXCEL关联。
【优缺点】
优点:
- 稳定、轻量级且功能强大
- 免费开源,但是开发手册和示例要花钱购买
- API处理简单,很容易上手
- 生成的图表运行顺畅
缺陷:
- 只适合生成图片
- 文字、图片都不是特别清晰,还需要进行一些调整,比较麻烦。
- 在交互性方面它比不上Flash图表工具,比如OpenFlash Chart、AnyChart、FusionCharts等。
【实践】
jar包:jfreechart-1.0.11.jar、jcommon-1.0.14.jar
思路:先根据数据生成相应的图表图片,然后再将图片显示在浏览器上。
代码:
package com.bjpowernode.drp.statreport.web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;
import com.bjpowernode.drp.util.servlet.BaseServlet;
/**
* 将数据生成的饼形图显示在浏览器上
* @author 郑艳霞
*
*/
public class ChartDemoServlet extends BaseServlet {
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
res.setContentType("image/jpeg");
DefaultPieDataset data = getDataSet();
JFreeChart chart = ChartFactory.createPieChart3D("水果产量图", data, true,
false, false);
ChartUtilities.writeChartAsJPEG(res.getOutputStream(), 1.0f, chart, 400,
300, null);
}
/**
* 获取一个演示用的简单数据集对象
*
* @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;
}
}
效果:
也可以对图片进行设置,在图片write在浏览器之前,进行设置,如下:
代码:
/**
* 将数据生成的饼形图显示在浏览器上
*
* @author 郑艳霞
*
*/
public class ChartDemoServlet extends BaseServlet {
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
res.setContentType("image/jpeg");
DefaultPieDataset data = getDataSet();
JFreeChart chart = ChartFactory.createPieChart3D("水果产量图", data, true,
false, false);
// 设置图片的百分百---begin---
PiePlot3D plot = (PiePlot3D) chart.getPlot();
// 图片中显示百分比:默认方式
// plot.setLabelGenerator(new
// StandardPieSectionLabelGenerator(StandardPieToolTipGenerator.DEFAULT_TOOLTIP_FORMAT));
// 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位
plot.setLabelGenerator(new StandardPieSectionLabelGenerator(
"{0}={1}({2})", NumberFormat.getNumberInstance(),
new DecimalFormat("0.00%")));
// 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例
plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator(
"{0}={1}({2})"));
// 设置图片的百分比---end---
ChartUtilities.writeChartAsJPEG(res.getOutputStream(), 1.0f, chart,
400, 300, null);
}