`
康敏栋
  • 浏览: 171371 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

jfreechart统计图

阅读更多
网上找了很多拼成的,自己也添加了一些东西,所以此处就不将转载的链接地址拷出来。

首先如果项目用到了struts,那么在web.xml和jsp中都加上.servlet,如果不加的话它会看成是.action的形式,所以到时候会显示不出图片,待会代码中会注明这点。

以下代码自己测试通过、

1.后台BarChartDemo,其中getDataSet2方法里面注释的是原作者的代码,此处将我加的代码及导入的包去掉就行。此处直接运行一下在D盘和E盘就可以生成图片,两种方法在ganarateFruitChart()中写了
package com.jw.magicbpm.action.officebusinessmanage;

import java.awt.Color;
import java.awt.Font;
import java.awt.RenderingHints;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.http.HttpSession;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;

import com.jw.magicbpm.basecommon.db.DbSessionFactory;
import com.jw.magicbpm.model.officebusinessmanage.B_V_Ufp_PeopleAgeStatistics;

public class BarChartDemo {

	/**
	 * 饼状图
	 */
	public static String generatePieChart(HttpSession session, PrintWriter pw,
			int w, int h) {
		String filename = null;
		handleGarbledAndFont();//设置乱码和字体
		PieDataset dataset = getDataSet();
		JFreeChart chart = ChartFactory.createPieChart3D("水果产量图", // 图表标题
				dataset, // 数据集
				true, // 是否显示图例
				false, // 是否生成工具
				false // 是否生成URL链接
				);
		chart.setBackgroundPaint(Color.pink);
		try {
			/*------得到chart的保存路径----*/
			ChartRenderingInfo info = new ChartRenderingInfo(
					new StandardEntityCollection());
			filename = ServletUtilities.saveChartAsPNG(chart, w, h, info,
					session);
			/*------使用printWriter将文件写出----*/
			ChartUtilities.writeImageMap(pw, filename, info, true);
			pw.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return filename;
	}

	/**
	 * 柱状图
	 * @throws Exception 
	 */
	public static String generateBarChart(HttpSession session, PrintWriter pw,
			int w, int h) throws Exception {
		String filename = null;
		handleGarbledAndFont();//设置乱码和字体
		CategoryDataset dataset = getDataSet2();
		JFreeChart chart = ChartFactory.createBarChart3D("干部年龄统计图", // 图表标题
				"年龄", // 目录轴的显示标签
				"人数", // 数值轴的显示标签
				dataset, // 数据集
				PlotOrientation.VERTICAL, // 图表方向:水平、垂直
				true, // 是否显示图例(对于简单的柱状图必须是false)
				false, // 是否生成工具
				false // 是否生成URL链接
				);
		Font labelFont = new Font("SansSerif", Font.BOLD, 9);
		CategoryPlot categoryplot = (CategoryPlot) chart.getPlot(); 
		CategoryAxis domainAxis = categoryplot.getDomainAxis();
		domainAxis.setLabelFont(labelFont);// X轴的标题文字字体
	    domainAxis.setTickLabelFont(labelFont);//X轴坐标上数值字体 
	    // 设置距离图片左端距离 
	    domainAxis.setLowerMargin(0.01); 
	    // 设置距离图片右端距离 
	    domainAxis.setUpperMargin(0.01);
		try {
			/*------得到chart的保存路径----*/
			ChartRenderingInfo info = new ChartRenderingInfo(
					new StandardEntityCollection());
			filename = ServletUtilities.saveChartAsPNG(chart, w, h, info,
					session);
			/*------使用printWriter将文件写出----*/
			ChartUtilities.writeImageMap(pw, filename, info, true);
			pw.flush();
		} catch (IOException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}
		return filename;
	}

	/**
	 * 折线图
	 */
	public static String generateLineChart(HttpSession session, PrintWriter pw,
			int w, int h) {
		String filename = null;
//		session.removeAttribute("JFreeChart_Deleter");//将tomcat中temp的统计图片删除
		handleGarbledAndFont();//设置乱码和字体
		CategoryDataset dataset = getDataSet3();
		JFreeChart chart = ChartFactory.createLineChart("水果产量图", // 图表标题
				"水果", // 目录轴的显示标签
				"产量", // 数值轴的显示标签
				dataset, // 数据集
				PlotOrientation.VERTICAL, // 图表方向:水平、垂直
				true, // 是否显示图例(对于简单的柱状图必须是false)
				false, // 是否生成工具
				false // 是否生成URL链接
				);

		/*----------设置消除字体的锯齿渲染(解决中文问题)--------------*/
		chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,
				RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);

		/*------------配置图表属性--------------*/
		// 1,设置整个图表背景颜色
		chart.setBackgroundPaint(Color.pink);

		/*------------设定Plot参数-------------*/
		CategoryPlot plot = chart.getCategoryPlot();
		// 2,设置详细图表的显示细节部分的背景颜色
		// plot.setBackgroundPaint(Color.PINK);
		// 3,设置垂直网格线颜色
		plot.setDomainGridlinePaint(Color.black);
		// 4,设置是否显示垂直网格线
		plot.setDomainGridlinesVisible(true);
		// 5,设置水平网格线颜色
		plot.setRangeGridlinePaint(Color.blue);
		// 6,设置是否显示水平网格线
		plot.setRangeGridlinesVisible(true);

		try {
			/*------得到chart的保存路径----*/
			ChartRenderingInfo info = new ChartRenderingInfo(
					new StandardEntityCollection());
			filename = ServletUtilities.saveChartAsPNG(chart, w, h, info,
					session);
			/*------使用printWriter将文件写出----*/
			ChartUtilities.writeImageMap(pw, filename, info, true);
			pw.flush();
		} catch (IOException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}
		return filename;
	}

	

	/**
	 * 获取一个饼状图的简单数据集对象
	 * 
	 * @return
	 */
	private static PieDataset getDataSet() {
		DefaultPieDataset dataset = new DefaultPieDataset();
		dataset.setValue("苹果", 100);
		dataset.setValue("梨子", 200);
		dataset.setValue("葡萄", 300);
		dataset.setValue("香蕉", 400);
		dataset.setValue("荔枝", 500);
		return dataset;
	}

	/**
	 * 获取一个柱状图数据集对象
	 * 
	 * @return
	 * @throws Exception 
	 */
	private static CategoryDataset getDataSet2() throws Exception {
		List<B_V_Ufp_PeopleAgeStatistics> list_B_V_Ufp_PeopleAgeStatistics1=PeopleAgeStatisticsAction.searchGovernmentLevelList(DbSessionFactory.getOracleSession());
		List<B_V_Ufp_PeopleAgeStatistics> list_B_V_Ufp_PeopleAgeStatistics2=PeopleAgeStatisticsAction.searchTownLevelList(DbSessionFactory.getOracleSession());
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics1.get(0).getUnderthirty(), "正局", "30周岁及以下");
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics1.get(0).getThirtyonetothirtyfive(), "正局", "31-35周岁");
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics1.get(0).getThirtysixtoforty(), "正局", "36-40周岁下");
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics1.get(0).getFortyonetofortyfive(), "正局", "41-45周岁");
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics1.get(0).getFortysixtofifty(), "正局", "46-50周岁");
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics1.get(0).getFiftyonetofiftyfive(), "正局", "51-55周岁");
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics1.get(0).getFiftysixtosixty(), "正局", "56-60周岁");
		
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics1.get(1).getUnderthirty(), "正科级", "30周岁及以下");
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics1.get(1).getThirtyonetothirtyfive(), "正科级", "31-35周岁");
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics1.get(1).getThirtysixtoforty(), "正科级", "36-40周岁下");
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics1.get(1).getFortyonetofortyfive(), "正科级", "41-45周岁");
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics1.get(1).getFortysixtofifty(), "正科级", "46-50周岁");
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics1.get(1).getFiftyonetofiftyfive(), "正科级", "51-55周岁");
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics1.get(1).getFiftysixtosixty(), "正科级", "56-60周岁");
		
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics2.get(0).getUnderthirty(), "副局级", "30周岁及以下");
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics2.get(0).getThirtyonetothirtyfive(), "副局级", "31-35周岁");
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics2.get(0).getThirtysixtoforty(), "副局级", "36-40周岁下");
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics2.get(0).getFortyonetofortyfive(), "副局级", "41-45周岁");
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics2.get(0).getFortysixtofifty(), "副局级", "46-50周岁");
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics2.get(0).getFiftyonetofiftyfive(), "副局级", "51-55周岁");
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics2.get(0).getFiftysixtosixty(), "副局级", "56-60周岁");
		
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics2.get(1).getUnderthirty(), "其他", "30周岁及以下");
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics2.get(1).getThirtyonetothirtyfive(), "其他", "31-35周岁");
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics2.get(1).getThirtysixtoforty(), "其他", "36-40周岁下");
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics2.get(1).getFortyonetofortyfive(), "其他", "41-45周岁");
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics2.get(1).getFortysixtofifty(), "其他", "46-50周岁");
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics2.get(1).getFiftyonetofiftyfive(), "其他", "51-55周岁");
		dataset.addValue(list_B_V_Ufp_PeopleAgeStatistics2.get(1).getFiftysixtosixty(), "其他", "56-60周岁");
		
		
//		dataset.addValue(100, "北京", "苹果");
//		dataset.addValue(500, "北京", "荔枝");
//		dataset.addValue(400, "北京", "香蕉");
//		dataset.addValue(200, "北京", "梨子");
//		dataset.addValue(300, "北京", "葡萄");
//		dataset.addValue(500, "上海", "葡萄");
//		dataset.addValue(600, "上海", "梨子");
//		dataset.addValue(400, "上海", "香蕉");
//		dataset.addValue(700, "上海", "苹果");
//		dataset.addValue(300, "上海", "荔枝");
//		dataset.addValue(300, "广州", "苹果");
//		dataset.addValue(200, "广州", "梨子");
//		dataset.addValue(500, "广州", "香蕉");
//		dataset.addValue(100, "广州", "葡萄");
//		dataset.addValue(400, "广州", "荔枝");
		return dataset;
	}

	/**
	 * 获取一个折线图数据集对象
	 * 
	 * @return
	 */
	private static CategoryDataset getDataSet3() {
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		dataset.addValue(100, "北京", "一月");
		dataset.addValue(200, "北京", "二月");
		dataset.addValue(100, "北京", "三月");
		dataset.addValue(400, "北京", "四月");
		dataset.addValue(300, "北京", "五月");
		dataset.addValue(500, "北京", "六月");
		dataset.addValue(90, "北京", "七月");
		dataset.addValue(700, "北京", "八月");
		dataset.addValue(800, "北京", "九月");
		dataset.addValue(1000, "北京", "十月");
		dataset.addValue(300, "北京", "十一月");
		dataset.addValue(700, "北京", "十二月");
		dataset.addValue(1200, "上海", "一月");
		dataset.addValue(1100, "上海", "二月");
		dataset.addValue(1000, "上海", "三月");
		dataset.addValue(900, "上海", "四月");
		dataset.addValue(800, "上海", "五月");
		dataset.addValue(700, "上海", "六月");
		dataset.addValue(600, "上海", "七月");
		dataset.addValue(500, "上海", "八月");
		dataset.addValue(400, "上海", "九月");
		dataset.addValue(300, "上海", "十月");
		dataset.addValue(200, "上海", "十一月");
		dataset.addValue(100, "上海", "十二月");
		dataset.addValue(600, "武汉", "一月");
		dataset.addValue(500, "武汉", "二月");
		dataset.addValue(400, "武汉", "三月");
		dataset.addValue(300, "武汉", "四月");
		dataset.addValue(200, "武汉", "五月");
		dataset.addValue(100, "武汉", "六月");
		dataset.addValue(200, "武汉", "七月");
		dataset.addValue(300, "武汉", "八月");
		dataset.addValue(400, "武汉", "九月");
		dataset.addValue(500, "武汉", "十月");
		dataset.addValue(600, "武汉", "十一月");
		dataset.addValue(700, "武汉", "十二月");
		return dataset;
	}
	/**
	 * 处理乱码和字体
	 * @throws IOException 
	 */
	public static void handleGarbledAndFont(){
		//创建主题样式  
       StandardChartTheme standardChartTheme=new StandardChartTheme("CN");  
       //设置标题字体  
       standardChartTheme.setExtraLargeFont(new Font("隶书",Font.BOLD,20));  
       //设置图例的字体  
       standardChartTheme.setRegularFont(new Font("宋书",Font.PLAIN,15));  
       //设置轴向的字体  
       standardChartTheme.setLargeFont(new Font("宋书",Font.PLAIN,15));  
       //应用主题样式  
       ChartFactory.setChartTheme(standardChartTheme);  
	}
	/**
	 * 在本地生成图片文件
	 * @throws Exception 
	 * @throws IOException 
	 */
	public static void ganarateFruitChart() throws Exception{
		CategoryDataset dataset = getDataSet2();
		
	       JFreeChart chart = ChartFactory.createBarChart3D("水果产量图", // 图表标题
				"月份", // 目录轴的显示标签
				"产量(公斤)", // 数值轴的显示标签
				dataset, // 数据集
				PlotOrientation.VERTICAL, // 图表方向:水平、垂直
				true, // 是否显示图例(对于简单的柱状图必须是false)
				false, // 是否生成工具
				false // 是否生成URL链接
				);
		
		FileOutputStream fos_jpg = null;
		try {
			fos_jpg = new FileOutputStream("D:\\fruit.jpg");//将图片保存到d盘
			ChartUtilities.writeChartAsJPEG(fos_jpg, 1.0f, chart, 400, 300,
					null);
			//将图片保存到E盘(另外一种写法)
			ChartUtilities.saveChartAsPNG(new File("E:/BarChart3D.png"), chart, 800, 500);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				fos_jpg.close();
			} catch (Exception e) {
			}
		}
	}
	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		ganarateFruitChart();
	}
}


2.jsp页面,将jsp:directive.page 导入换成自己路径
<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="java.io.PrintWriter"%>
<jsp:directive.page import="com.jw.magicbpm.action.officebusinessmanage.BarChartDemo"/>
<html>
<head>
<title>
</title>
<%
//饼状图
String fileNamePie=BarChartDemo.generatePieChart(session,new PrintWriter(out),580,250);
//如果用了strut的话此处为DisplayChart.servlet,不能DisplayChart,原因上面说了
String graphURLPie = request.getContextPath() + "/servlet/DisplayChart.servlet?filename=" + fileNamePie;
//柱状图
String fileNameBar=BarChartDemo.generateBarChart(session,new PrintWriter(out),580,250);
String graphURLBar = request.getContextPath() + "/servlet/DisplayChart.servlet?filename=" + fileNameBar;
//折线图
String fileNameLine=BarChartDemo.generateLineChart(session,new PrintWriter(out),580,250);
String graphURLLine = request.getContextPath() + "/servlet/DisplayChart.servlet?filename=" + fileNameLine;

%>
</head>
<body bgcolor="#ffffff">
<table align="center" width="580" border="0" cellspacing="0" cellpadding="0">
 <tr>
    <td>
      <img src="<%= graphURLPie %>"width=580 height=250 border=0 >
    </td>
 </tr>
 <tr>
    <td>
      <img src="<%= graphURLBar %>"width=580 height=250 border=0 >
    </td>
 </tr>
 <tr>
    <td>
      <img src="<%= graphURLLine %>"width=580 height=250 border=0 >
    </td>
 </tr>
</table>
</body>
</html>


3.web.xml加上以下,里面DisplayChart也得加上servlet,和jsp里面一致
<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.servlet</url-pattern>
</servlet-mapping>


如果是用的tomcat,那么所生成的临时图片都在tomcat目录中temp文件中,每次点击进入页面就会生成图片,时间一久tomcat中那这些没用的图片就会很多。得想办法删了,114行我注释的这句话session.removeAttribute("JFreeChart_Deleter");//将tomcat中temp的统计图片删除
这个就是删除生成的临时图片,但也局限性,就如这jsp中如果有三个统计,分开了每次跑后台,那么在后台每次都执行session.removeAttribute("JFreeChart_Deleter"),这样就会每次将前面的所生成的图片删除,那么三次跑后台到最后就只有最后一张图片了,所以尽量只走一次后台,或者后台整合到一个方法中,前台页面就一个url.如果确实得分开来用几个统计,那可用bat脚本将temp里面的临时图片删除(个人推荐这种方法),见http://liangjie5305579-126-com.iteye.com/admin/blogs/1743824.
分享到:
评论

相关推荐

    jfreechart统计图的WEB打照

    在"jfreechart统计图的WEB打照"这个主题中,我们将深入探讨如何使用JFreeChart来生成统计图表,并将其集成到Web应用中。 首先,我们需要了解JFreeChart的基本用法。JFreeChart库提供了一系列的类和方法来创建和定制...

    JFreeChart统计图资料

    **JFreeChart统计图资料详解** 在数据可视化领域,JFreeChart是一个强大的开源Java库,它为开发者提供了创建各种类型统计图的能力,如柱状图、饼图和曲线图等。JFreeChart自2001年发布以来,一直被广泛应用于商业...

    JFreeChart统计图

    **JFreeChart统计图** JFreeChart是一款强大的Java库,专为创建高质量的图表而设计。这个库广泛用于各种应用程序,包括报告、仪表板、Web应用等,它提供了丰富的图表类型,如曲线图、柱形图和饼状图。通过...

    JFreeChart统计绘图

    JFreeChart是一款强大的Java库,专门用于生成高质量的统计图表,包括折线图、柱状图、饼图、散点图、甘特图等多种类型。它在IT领域中广泛应用于数据分析、报表生成以及可视化应用中,能有效地帮助开发者将复杂的数据...

    jfreechart生成统计图的例子(柱线饼)

    本例子将详细介绍如何利用JFreeChart生成统计图,特别是柱状图和饼图。 首先,我们需要导入JFreeChart库。通常,这涉及到在项目中添加JFreeChart的jar包。在提供的压缩包中,`chartDemo`可能是包含示例代码的Java...

    jfreechart 统计图形

    JFreeChart是一款强大的Java库,专门用于生成高质量的统计图形。这款开源工具广泛应用于各种Java应用程序,包括桌面应用、Web应用以及服务器端应用,能够帮助开发者轻松创建各种复杂的图表,如折线图、柱状图、饼图...

    jfreechart 统计图

    在深入学习 JFreeChart 之前,让我们先了解一下统计图的基本概念。 统计图是数据可视化的重要工具,它能够将复杂的数据以图形的方式展示出来,帮助我们直观地理解和分析数据。柱状图用于比较类别之间的数量差异,...

    jfreechart曲线图

    在压缩包中的"jfreechart统计图"可能包含了使用JFreeChart创建的各种统计图表示例,通过研究这些示例,你可以更好地理解和学习如何使用JFreeChart库。这不仅有助于掌握曲线图的绘制,还能对其他类型的图表有所了解,...

    JFreeChart+JSP实现统计图展示

    "JFreeChart+JSP实现统计图展示"是一个典型的Web应用程序开发案例,它结合了JFreeChart库、JavaServer Pages (JSP) 和Servlet技术,用于从SQL Server 2005数据库中提取数据并以图表的形式呈现。 **JFreeChart** 是...

    Spring+JFreeChart 自动生成统计图

    标题“Spring+JFreeChart 自动生成统计图”涉及的是在Java开发环境中,利用Spring框架和JFreeChart库来动态生成图表的技巧。这篇文章可能是介绍如何在Spring应用中集成JFreeChart,以便为数据可视化提供服务。 ...

    java利用JFreeChart实现各类数据统计图柱形图饼图折线图.pdf

    Java 利用 JFreeChart 实现数据统计图 在数据挖掘中,数据分析的结果需要直观地展现给用户,这就需要使用数据统计图。Java 中可以使用 JFreeChart 库来实现各种数据统计图,如柱形图、饼图、折线图等。下面将详细...

    统计图 JFreeChart

    下面有两个简单的例子,调用servlet,生成统计图. 条形统计图 href="servlet/ServletDemo1"&gt;条形统计图; &lt;!--跳转到ServletDemo1生成条形统计图--&gt; 可以选择统计图类型 href="chart1.html"&gt;三种类型 &lt;!--链接到chart...

    S2SH+jfreechart+ajax动态生成统计图

    下面是实现动态生成统计图的具体步骤: 1. **项目设置**: - 创建一个新的S2SH项目,并配置好相关的框架。 - 将必要的库文件添加到项目的类路径中,包括jfreechart-1.0.14.jar、struts2-jfreechart-plugin-2.2.1....

    jfreechart各类曲线图JSP代码

    JFreeChart是一组功能强大、灵活易用的Java绘图API,使用它可以生成多种通用性的报表,包括柱状图、饼图、曲线图、甘特图等。它能够用在Swing和Web等中制作自定义的图表或报表,并且得到广泛的应用。本文将通过引领...

Global site tag (gtag.js) - Google Analytics