使用JFreeChart在web中绘制图表

          用JFreeChart绘制图表,能够绘制二维柱状图、三维柱状图、折线图、以及饼图,网上也有不少关于JFreeChart绘制图像的源码,可是仍是须要本身去总结一下这个过程。html

         对于图表并不陌生,office word中咱们对数据进行分类汇总,最后在让咱们本身把分类汇总的内容生成一个图表的样式。而在java web开发中,咱们又一次碰见了,对于图表的汇总可选方案有多种,在这里使用的是JFreeChart。java

        一、开发环境搭建。node

        和图片上传的功能同样,JFreechart是一个开源项目,咱们能够从网上下载想要的版本。http://www.jfree.org/jfreechart/index.html,咱们把下载的压缩包解压就能够看到以下目录结构:
web

 

        解压咱们把lib中的jar包copy到咱们项目的web-inf/lib目录中去。浏览器

        二、编写代码,显示图表的servlet。app

package com.bjpowernode.drp.statreport.web; import java.io.FileOutputStream; import java.io.IOException; import java.text.DecimalFormat; import java.text.NumberFormat; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.labels.StandardPieSectionLabelGenerator; import org.jfree.chart.plot.PiePlot3D; import org.jfree.data.general.DefaultPieDataset; /** * 演示经过servlet直接输出图表 * @author Winter Lau */ public class ChartDemoServlet extends HttpServlet { 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 ); //设置图表的百分比. 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})")); //将图表输出到浏览器上. 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; } } 


        配置ChartDemoServlet:函数

 <servlet> <servlet-name>ChartDemoServlet</servlet-name> <servlet-class>com.bjpowernode.drp.statreport.web.ChartDemoServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ChartDemoServlet</servlet-name> <url-pattern>/servlet/statreport/FlowCardServlet</url-pattern> </servlet-mapping> 


        在浏览器中能够显示这个servlet,咱们在浏览器中调用这个servlet:http://localhost:8080/InfgMan6.0/servlet/statreport/FlowCardServlet,咱们的图表显示以下:
学习

 

        而后咱们再根据本身的须要,更改图例,更改图表列等,再嵌入到本身的网页中具体的位置.url

        这个例子自己很简单,只不过又一次感觉这个由陌生到到熟悉的过程,没有接触的时候,不敢开始,感受神秘,当咱们鼓足勇气去接触去尝试,发现其实很简单,人家写好了的源码,咱们去引用这个包,而且去用,对于错误的地方,咱们去看看源码,或者看看帮助文档,看看具体的这个类或者这个函数的参数是什么,表明的什么,哪里出现的错误,写这篇博客的目的是警醒本身要遵照学习的规律,勇敢走下去。spa