jfreechart生成不同统计图
来源:互联网 发布:数据挖掘分析技术 编辑:程序博客网 时间:2024/04/30 06:08
package com.jfc.ww.servlet;
import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickUnit;
import org.jfree.chart.axis.DateTickUnitType;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DatasetGroup;
import org.jfree.data.general.DatasetUtilities;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.time.Day;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.date.SerialDateUtilities;
import org.jfree.ui.TextAnchor;
public class JFreeCharServilet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response){
response.setContentType("text/html");
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response){
response.setContentType("text/html");
HttpSession session =request.getSession();
String fileType=request.getParameter("fileType");
String fileName=null;
if(fileType.equals("pie")){
fileName=this.pieTest(session);
}else if(fileType.equals("bar")){
fileName=this.barTest(session);
}else if(fileType.equals("stackedBar")){
fileName=this.stackedBarTest(session);
}else if(fileType.equals("line")){
fileName=this.lineTest(session);
}else if(fileType.equals("timeSeries")){
fileName=this.timeSeriesTest(session);
}
request.setAttribute("fileName", fileName);
try {
request.getRequestDispatcher("content.jsp").forward(request, response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//饼状图
public String pieTest(HttpSession session){
String fileName = null;
DefaultPieDataset dfd=new DefaultPieDataset();
dfd.setValue("张三", 10);
dfd.setValue("李四", 15);
dfd.setValue("ccc", 30);
dfd.setValue("ddd", 25);
dfd.setValue("eee", 5);
JFreeChart jfc=ChartFactory.createPieChart3D("饼状图统计", dfd, true, true, true);
jfc.getTitle().setFont(new Font("隶书",Font.BOLD,20));//设置标题字体 防止中文乱码
PiePlot plot=(PiePlot)jfc.getPlot();//设置饼中字体 防止中文乱麻
plot.setLabelFont(new Font("宋体",Font.BOLD,20));
plot.setNoDataMessage("暂无数据");
plot.setCircular(true);
plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0} {2}",NumberFormat.getNumberInstance(),new DecimalFormat("0.00%")));
plot.setForegroundAlpha(0.7f);//透明度
LegendTitle legendtitle=jfc.getLegend(0); //设置低栏字体 防止中文乱码
legendtitle.setItemFont(new Font("宋体",Font.ITALIC,20));
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
try {
fileName=ServletUtilities.saveChartAsPNG(jfc, 800, 500, info, session);
} catch (IOException e) {
e.printStackTrace();
}
return fileName;
}
//柱状图
public String barTest(HttpSession session){
String fileName = null;
DefaultCategoryDataset dataset=new DefaultCategoryDataset();
dataset.addValue(300, "广州", "苹果");
dataset.addValue(200, "广州", "梨子");
dataset.addValue(500, "广州", "葡萄");
dataset.addValue(340, "广州", "芒果");
dataset.addValue(280, "广州", "荔枝");
JFreeChart jfc=ChartFactory.createBarChart3D("柱状图统计", "水果", "销量", dataset, PlotOrientation.VERTICAL, true, true, true);
jfc.setTitle(new TextTitle("柱状图统计", new Font("隶书", Font.BOLD+ Font.ITALIC, 20)));
CategoryPlot plot = (CategoryPlot) jfc.getPlot();
CategoryAxis domainAxis=plot.getDomainAxis();
domainAxis.setVisible(true);
domainAxis.setLowerMargin(0.1);
domainAxis.setUpperMargin(0.1);
domainAxis.setLabelFont(new Font("微软雅黑", Font.BOLD, 12));//横轴坐标标题字体
domainAxis.setTickLabelFont(new Font("微软雅黑", Font.BOLD, 12));//横轴柱体标题字体
NumberAxis numberAxis = (NumberAxis)plot.getRangeAxis();
numberAxis.setLabelFont(new Font("微软雅黑", Font.BOLD, 12));//纵轴坐标标题字体
ValueAxis valueAxis=plot.getRangeAxis();
valueAxis.setPositiveArrowVisible(true);//是否显示纵轴坐标只想剪头
BarRenderer renderer = (BarRenderer)plot.getRenderer();
//显示每个柱的数值,并修改该数值的字体属性
renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setItemLabelFont(new Font("黑体",Font.PLAIN,9));
renderer.setItemLabelsVisible(true);
plot.setRenderer(renderer);
plot.setForegroundAlpha(0.8f);//透明度
LegendTitle legendtitle=jfc.getLegend(0); //设置低栏字体 防止中文乱码
legendtitle.setItemFont(new Font("宋体",Font.ITALIC,20));
try {
fileName=ServletUtilities.saveChartAsPNG(jfc, 800, 500, null, session);
} catch (IOException e) {
e.printStackTrace();
}
return fileName;
}
//堆柱状图
public String stackedBarTest(HttpSession session){
String fileName = null;
double [][] data=new double[][]{{365,321,257,156,147},{369,214,587,263,666},{236,987,546,258,418},{369,258,147,456,122},{759,153,751,359,951}};
String [] rowKeys={"苹果","梨子","葡萄","香蕉","橘子"};
String [] columnKeys={"北京","上海","广州","深圳","大连"};
CategoryDataset dataset=DatasetUtilities.createCategoryDataset(rowKeys, columnKeys,data);
JFreeChart jfc=ChartFactory.createStackedBarChart3D("堆柱状图统计", "水果", "销量", dataset, PlotOrientation.VERTICAL, true, true, true);
jfc.setTitle(new TextTitle("堆柱状图统计", new Font("隶书", Font.ITALIC+ Font.ITALIC, 20)));
CategoryPlot plot = (CategoryPlot) jfc.getPlot();
CategoryAxis domainAxis=plot.getDomainAxis();
domainAxis.setVisible(true);
domainAxis.setLowerMargin(0.05);
domainAxis.setUpperMargin(0.05);
domainAxis.setLabelFont(new Font("微软雅黑", Font.BOLD, 12));//横轴坐标标题字体
domainAxis.setTickLabelFont(new Font("微软雅黑", Font.BOLD, 12));//横轴柱体标题字体
NumberAxis numberAxis = (NumberAxis)plot.getRangeAxis();
numberAxis.setLabelFont(new Font("微软雅黑", Font.BOLD, 12));//纵轴坐标标题字体
ValueAxis valueAxis=plot.getRangeAxis();
valueAxis.setPositiveArrowVisible(true);//是否显示纵轴坐标指向剪头
BarRenderer renderer = new BarRenderer3D();
renderer.setMaximumBarWidth(0.5);//柱体宽度
renderer.setItemMargin(0.05);//组内柱子间隔
//显示每个柱的数值,并修改该数值的字体属性
renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setItemLabelFont(new Font("黑体",Font.BOLD,8));//6号黑体加粗
renderer.setItemLabelPaint(Color.black);//字体为黑色
renderer.setItemLabelsVisible(true);
//显示每个柱的数值,并修改该数值的字体属性
renderer.setItemMargin(0.01);
plot.setRenderer(renderer);
plot.setForegroundAlpha(0.8f);//透明度
LegendTitle legendtitle=jfc.getLegend(0); //设置低栏字体 防止中文乱码
legendtitle.setItemFont(new Font("宋体",Font.ITALIC,20));
try {
fileName=ServletUtilities.saveChartAsPNG(jfc, 800, 500, null, session);
} catch (IOException e) {
e.printStackTrace();
}
return fileName;
}
//折线图
public String lineTest(HttpSession session){
String fileName = null;
DefaultCategoryDataset linedataset = new DefaultCategoryDataset();
//各曲线名称
String series1 = "冰箱";
String series2 = "彩电";
String series3 = "洗衣机";
//横轴名称(列名称)
String type1 = "1月";
String type2 = "2月";
String type3 = "3月";
String type4 = "4月";
String type5 = "5月";
String type6 = "6月";
linedataset.addValue(0.0, series1, type1);
linedataset.addValue(4.2, series1, type2);
linedataset.addValue(3.9, series1, type3);
linedataset.addValue(3.5, series1, type4);
linedataset.addValue(5.4, series1, type5);
linedataset.addValue(8.0, series1, type6);
linedataset.addValue(1.0, series2, type1);
linedataset.addValue(5.2, series2, type2);
linedataset.addValue(7.9, series2, type3);
linedataset.addValue(2.2, series2, type4);
linedataset.addValue(9.0, series2, type5);
linedataset.addValue(3.5, series2, type6);
linedataset.addValue(2.0, series3, type1);
linedataset.addValue(9.2, series3, type2);
linedataset.addValue(8.9, series3, type3);
linedataset.addValue(5.4, series3, type4);
linedataset.addValue(4.1, series3, type5);
linedataset.addValue(2.8, series3, type6);
JFreeChart jfc = ChartFactory.createLineChart("折线图","时间","销售额(百万)",linedataset,PlotOrientation.VERTICAL,true,true,false);
jfc.setTitle(new TextTitle("折线图统计", new Font("隶书", Font.BOLD+ Font.ITALIC, 20)));
CategoryPlot plot = (CategoryPlot) jfc.getPlot();
CategoryAxis domainAxis=plot.getDomainAxis();
domainAxis.setVisible(true);
domainAxis.setLowerMargin(0.05);
domainAxis.setUpperMargin(0.05);
domainAxis.setLabelFont(new Font("微软雅黑", Font.BOLD, 12));//横轴坐标标题字体
domainAxis.setTickLabelFont(new Font("微软雅黑", Font.BOLD, 12));//横轴柱体标题字体
NumberAxis numberAxis = (NumberAxis)plot.getRangeAxis();
numberAxis.setLabelFont(new Font("微软雅黑", Font.BOLD, 12));//纵轴坐标标题字体
numberAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
numberAxis.setAutoRangeIncludesZero(true);
numberAxis.setUpperMargin(0.10);
numberAxis.setLabelAngle(Math.PI / 2.0);
ValueAxis valueAxis=plot.getRangeAxis();
valueAxis.setPositiveArrowVisible(true);//是否显示纵轴坐标指向剪头
LegendTitle legendtitle=jfc.getLegend(0); //设置低栏字体 防止中文乱码
legendtitle.setItemFont(new Font("宋体",Font.ITALIC,20));
//设置折点突出显示
LineAndShapeRenderer renderer=(LineAndShapeRenderer)plot.getRenderer();
renderer.setShapesVisible(true);
renderer.setDrawOutlines(true);
renderer.setUseFillPaint(true);
renderer.setFillPaint(java.awt.Color.white);
//显示折点数值
renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setItemLabelFont(new Font("宋体",Font.BOLD,10));//6号黑体加粗
renderer.setItemLabelPaint(Color.black);//字体为黑色
renderer.setItemLabelsVisible(true);
try {
fileName=ServletUtilities.saveChartAsPNG(jfc, 800, 500, null, session);
} catch (IOException e) {
e.printStackTrace();
}
return fileName;
}
//时序图
public String timeSeriesTest(HttpSession session){
String fileName = null;
XYDataset timeSeriesCollection =null;
TimeSeries timeseries = new TimeSeries("Data");
Day day = new Day(1,1,2010); //实例化Day
double d = 3000D;
//添加一年365天的数据
for (int i=0;i<365;i++){
d=d+(Math.random()-0.5)*10; //创建随机数据
timeseries.add(day,d); //向数据集合中添加数据
day=(Day)day.next();
}
//创建TimeSeriesCollection集合对象
timeSeriesCollection =new TimeSeriesCollection(timeseries);
JFreeChart jfc = ChartFactory.createTimeSeriesChart("时序图统计","销售月份","销量(份)",timeSeriesCollection,false,false,false);
jfc.setTitle(new TextTitle("时序图统计", new Font("隶书", Font.BOLD+ Font.ITALIC, 20)));
//设置标题字体
jfc.getTitle().setFont(new Font("隶书", Font.BOLD, 26));
//jfc.setBackgroundPaint(new Color(252,175,222));//设置背景色
XYPlot plot = jfc.getXYPlot(); //获取图表的绘制属性
plot.setDomainGridlinesVisible(true); //设置网格不显示
DateAxis dateAxis = (DateAxis) plot.getDomainAxis(); //获取时间轴对象
dateAxis.setLabelFont(new Font("黑体", Font.ITALIC , 18)); //设置时间轴字体
dateAxis.setTickLabelFont(new Font("宋体",Font.PLAIN,12)); //设置时间轴标尺值字体
dateAxis.setLowerMargin(0.0); //设置时间轴上显示的最小值
ValueAxis valueAxis = plot.getRangeAxis(); //获取数据轴对象
valueAxis.setLabelFont(new Font("黑体", Font.ITALIC , 18)); //设置数据字体
DateFormat format = new SimpleDateFormat("MM月份"); //创建日期格式对象
DateTickUnit dtu = new DateTickUnit(DateTickUnitType.DAY,29,format); //创建DateTickUnit对象
dateAxis.setTickUnit(dtu); //设置日期轴的日期标签
try {
fileName=ServletUtilities.saveChartAsPNG(jfc, 800, 500, null, session);
} catch (IOException e) {
e.printStackTrace();
}
return fileName;
}
/**
public static void main(String [] args){
XYDataset timeSeriesCollection =null;
TimeSeries timeseries = new TimeSeries("Data");
Day day = new Day(1,1,2010); //实例化Day
double d = 3000D;
//添加一年365天的数据
for (int i=0;i<365;i++){
d=d+(Math.random()-0.5)*10; //创建随机数据
timeseries.add(day,d); //向数据集合中添加数据
day=(Day)day.next();
}
//创建TimeSeriesCollection集合对象
timeSeriesCollection =new TimeSeriesCollection(timeseries);
JFreeChart jfc = ChartFactory.createTimeSeriesChart("时序图统计","销售月份","销量(份)",timeSeriesCollection,false,false,false);
jfc.setTitle(new TextTitle("时序图统计", new Font("隶书", Font.BOLD+ Font.ITALIC, 20)));
//设置标题字体
jfc.getTitle().setFont(new Font("隶书", Font.BOLD, 26));
//jfc.setBackgroundPaint(new Color(252,175,222));//设置背景色
XYPlot plot = jfc.getXYPlot(); //获取图表的绘制属性
plot.setDomainGridlinesVisible(true); //设置网格不显示
DateAxis dateAxis = (DateAxis) plot.getDomainAxis(); //获取时间轴对象
dateAxis.setLabelFont(new Font("黑体", Font.ITALIC , 18)); //设置时间轴字体
dateAxis.setTickLabelFont(new Font("宋体",Font.PLAIN,12)); //设置时间轴标尺值字体
dateAxis.setLowerMargin(0.0); //设置时间轴上显示的最小值
ValueAxis valueAxis = plot.getRangeAxis(); //获取数据轴对象
valueAxis.setLabelFont(new Font("黑体", Font.ITALIC , 18)); //设置数据字体
DateFormat format = new SimpleDateFormat("MM月份"); //创建日期格式对象
DateTickUnit dtu = new DateTickUnit(DateTickUnitType.DAY,29,format); //创建DateTickUnit对象
dateAxis.setTickUnit(dtu); //设置日期轴的日期标签
ChartFrame cf=new ChartFrame("JFreeChar测试",jfc,true);
cf.pack();
cf.setVisible(true);
}
**/
}
接收页面
</head>
<%
String filename=(String)request.getAttribute("fileName");
String graphurl = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
%>
<body>
<img src= "<%=graphurl %>" width="800" height="500" border="0" usemap="#<%=filename %>" align="middle"/>
</body>
</html>
xml文件配置
<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>
- jfreechart生成不同统计图
- JFreeChart生成各种统计图
- JFreeChart生成条形统计图(柱形图)
- struts运用jfreechart生成统计图教程
- JfreeChart生成统计图,导出word文档
- JFreeChart统计图
- 统计图JFreeChart
- 统计图JFreeChart
- JFreeChart统计图
- java中利用JFreeChart生成条形统计图(柱形图)
- 使用JFreeChart构造统计图
- jfreechart-立体统计图
- jQuery_统计图插件-jfreechart
- 教你如何利用POI和JFreeChart框架实现生成Excel文件(生成 统计图)
- 教你如何利用POI和JFreeChart框架实现生成Excel文件(生成 统计图)
- JAVA 开源类库 绘制统计图 JFreeChart
- JAVA 开源类库 绘制统计图 JFreeChart
- jfreechart创建包含Map对象的统计图
- 地图服务不能启动的原因之一
- myeclipse下使用xfire,JAX-WS、Axis 创建web service入门实例
- c++下的xml解析器
- 2010-12-7 正式使用本博客 只写技术相关
- 时间管理——华为成功之宝
- jfreechart生成不同统计图
- 加速SQL查询效能的七大秘诀
- windows笔记-【内核对象线程同步】等待定时器内核对象
- CodeMan快速安装配置教程:Windows下安装配置Java JDK环境
- 开始研读think in java
- windows笔记-【内核对象线程同步】事件内核对象
- brctl
- 编写FTP客户端时查阅用
- windows笔记-内核对象