`
ghost_fly
  • 浏览: 111446 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

jfreechar 生成图

阅读更多
package com.talkweb.jobseeker.worker.action;

import java.awt.Color;
import java.awt.Font;
import java.awt.RenderingHints;
import java.io.PrintWriter;
import java.text.DecimalFormat;
import java.text.NumberFormat;

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.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.entity.StandardEntityCollection;
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.renderer.category.BarRenderer;
import org.jfree.chart.servlet.ChartDeleter;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.DatasetUtilities;
import org.jfree.data.general.DefaultPieDataset;

public class ChartUtil {
	//饼图
	// 产生时间序列图,返回图片名称 
	public static String generatePieChart(DefaultPieDataset dataset,
			String title, int width, int height, HttpSession session,
			PrintWriter pw) {

		String filename = null;
		try {
			if (session != null) {
				ChartDeleter deleter = (ChartDeleter) session
						.getAttribute("JFreeChart_Deleter");
				session.removeAttribute("JFreeChart_Deleter");
				session.setAttribute("JFreeChart_Deleter", deleter);
			}
			JFreeChart chart = ChartFactory.createPieChart(title, 
					dataset, // data
					true, // include legend
					true, false);
			
			  // 图片背景色
			chart.setBackgroundPaint(Color.white);
			
			PiePlot plot = (PiePlot) chart.getPlot();
			 plot.setNoDataMessage("暂时无相关的数据。");

			  // 设置无数据时的信息显示颜色
			  plot.setNoDataMessagePaint(Color.red);
			  plot.setLabelGenerator(new StandardPieSectionLabelGenerator(
					    "{0}={1}({2})", NumberFormat.getNumberInstance(),
					    new DecimalFormat("0.00%")));
					  // 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例
		     plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator(
					    "{0}={1}({2})"));  
		     // 指定图片的透明度(0.0-1.0)
		     //plot.setForegroundAlpha(0.65f);
		     // 指定显示的饼图上圆形(false)还椭圆形(true)
		     plot.setCircular(true, false);

		     // 设置第一个 饼块section 的开始位置,默认是12点钟方向
		     plot.setStartAngle(90);

			// 图表图像写入到临时目录
			ChartRenderingInfo info = new ChartRenderingInfo(
					new StandardEntityCollection());
			
			filename = ServletUtilities.saveChartAsPNG(chart, width, height,
					info, session);
			// Write the image map to the PrintWriter
			ChartUtilities.writeImageMap(pw, filename, info, true);
			pw.flush();
		} catch (Exception e) {
			System.out.println("Exception - " + e.toString());
			e.printStackTrace(System.out);
			filename = "picture_error.png";
		}
		return filename;
	}
	
	/**
	 * 单柱
	 * @param dataset
	 * @param xName
	 * @param yName
	 * @param title
	 * @param width
	 * @param height
	 * @param session
	 * @param pw
	 * @return
	 */
	public static String generatePoleChart(CategoryDataset dataset, String xName,
			   String yName,String title, int width, int height, HttpSession session,
			PrintWriter pw) {
		String filename="";
		try{
			 JFreeChart chart = ChartFactory.createBarChart(title, // 图表标题
					    xName, // 目录轴的显示标签
					    yName, // 数值轴的显示标签
					    dataset, // 数据集
					    PlotOrientation.VERTICAL, // 图表方向:水平、垂直
					    true, // 是否显示图例(对于简单的柱状图必须是false)
					    false, // 是否生成工具
					    false // 是否生成URL链接
					    );
			 Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);
			  /*
			   * VALUE_TEXT_ANTIALIAS_OFF表示将文字的抗锯齿关闭,
			   * 使用的关闭抗锯齿后,字体尽量选择12到14号的宋体字,这样文字最清晰好看
			   */
			  // chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
			 // chart.setTextAntiAlias(false);
			  chart.setBackgroundPaint(Color.white);
			  // create plot
			  CategoryPlot plot = chart.getCategoryPlot();
			  // 设置横虚线可见
			  plot.setRangeGridlinesVisible(true);
			  // 虚线色彩
			  plot.setRangeGridlinePaint(Color.gray);
			  
			  plot.setNoDataMessage("暂时无相关的数据。");
			// 设置无数据时的信息显示颜色
			  plot.setNoDataMessagePaint(Color.red);
			  // 数据轴精度
			  NumberAxis vn = (NumberAxis) plot.getRangeAxis();
			  // vn.setAutoRangeIncludesZero(true);
			  DecimalFormat df = new DecimalFormat("#0");
			  vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式
			  // x轴设置
			  CategoryAxis domainAxis = plot.getDomainAxis();
			  domainAxis.setLabelFont(labelFont);// 轴标题
			  domainAxis.setTickLabelFont(labelFont);// 轴数值

			  // Lable(Math.PI/3.0)度倾斜
			  // domainAxis.setCategoryLabelPositions(CategoryLabelPositions
			  // .createUpRotationLabelPositions(Math.PI / 3.0));

			  domainAxis.setMaximumCategoryLabelWidthRatio(1f);// 横轴上的 Lable 是否完整显示

			  // 设置距离图片左端距离
			  domainAxis.setLowerMargin(0.1);
			  // 设置距离图片右端距离
			  domainAxis.setUpperMargin(0.1);
			  // 设置 columnKey 是否间隔显示
			  // domainAxis.setSkipCategoryLabelsToFit(true);
			  
			  plot.setDomainAxis(domainAxis);
			  // 设置柱图背景色(注意,系统取色的时候要使用16位的模式来查看颜色编码,这样比较准确)
			  plot.setBackgroundPaint(new Color(255, 255, 204));

			  // y轴设置
			  ValueAxis rangeAxis = plot.getRangeAxis();
			  rangeAxis.setLabelFont(labelFont);
			  rangeAxis.setTickLabelFont(labelFont);
			  // 设置最高的一个 Item 与图片顶端的距离
			  rangeAxis.setUpperMargin(0.15);
			  // 设置最低的一个 Item 与图片底端的距离
			  rangeAxis.setLowerMargin(0.15);
			  plot.setRangeAxis(rangeAxis);

			  BarRenderer renderer = new BarRenderer();
			  // 设置柱子宽度
			  renderer.setMaximumBarWidth(0.05);
			  // 设置柱子高度
			  renderer.setMinimumBarLength(0.2);
			  // 设置柱子边框颜色
			  renderer.setBaseOutlinePaint(Color.BLACK);
			  // 设置柱子边框可见
			  renderer.setDrawBarOutline(true);

			  // // 设置柱的颜色
			  renderer.setSeriesPaint(0, new Color(204, 255, 255));
			  renderer.setSeriesPaint(1, new Color(153, 204, 255));
			  renderer.setSeriesPaint(2, new Color(51, 204, 204));

			  // 设置每个地区所包含的平行柱的之间距离
			  renderer.setItemMargin(0.0);

			  // 显示每个柱的数值,并修改该数值的字体属性
			// renderer.setIncludeBaseInRange(true);
			  renderer
			    .setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
			  renderer.setBaseItemLabelsVisible(true);

			  plot.setRenderer(renderer);
			  // 设置柱的透明度
			  plot.setForegroundAlpha(1.0f);
			  
			// 图表图像写入到临时目录
				ChartRenderingInfo info = new ChartRenderingInfo(
						new StandardEntityCollection());
				
				filename = ServletUtilities.saveChartAsPNG(chart, width, height,
						info, session);
				// Write the image map to the PrintWriter
				ChartUtilities.writeImageMap(pw, filename, info, true);
				pw.flush();
			
			
		}catch (Exception e) {
			System.out.println("Exception - " + e.toString());
			e.printStackTrace(System.out);
			filename = "picture_error.png";
		}
		return filename;
	}

	/**
	 * 单柱 水平
	 */
	public static String generatePoleChartForHor(CategoryDataset dataset, String xName,
			   String yName,String title, int width, int height, HttpSession session,
			PrintWriter pw) {
		String filename="";
		try{
			 JFreeChart chart = ChartFactory.createBarChart(title, // 图表标题
					    xName, // 目录轴的显示标签
					    yName, // 数值轴的显示标签
					    dataset, // 数据集
					    PlotOrientation.HORIZONTAL, // 图表方向:水平、垂直
					    true, // 是否显示图例(对于简单的柱状图必须是false)
					    true, // 是否生成工具
					    false // 是否生成URL链接
					    );
			 Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);
			  /*
			   * VALUE_TEXT_ANTIALIAS_OFF表示将文字的抗锯齿关闭,
			   * 使用的关闭抗锯齿后,字体尽量选择12到14号的宋体字,这样文字最清晰好看
			   */
			   chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
			 // chart.setTextAntiAlias(false);
			  chart.setBackgroundPaint(Color.white);
			  // create plot
			  CategoryPlot plot = chart.getCategoryPlot();
			  // 设置横虚线可见
			  plot.setRangeGridlinesVisible(true);
			  // 虚线色彩
			  plot.setRangeGridlinePaint(Color.gray);
			  
			  plot.setNoDataMessage("暂时无相关的数据。");
			// 设置无数据时的信息显示颜色
			  plot.setNoDataMessagePaint(Color.red);
			  // 数据轴精度
			  NumberAxis vn = (NumberAxis) plot.getRangeAxis();
			  // vn.setAutoRangeIncludesZero(true);
			  DecimalFormat df = new DecimalFormat("#0");
			  vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式
			  // x轴设置
			  CategoryAxis domainAxis = plot.getDomainAxis();
			  domainAxis.setLabelFont(labelFont);// 轴标题
			  domainAxis.setTickLabelFont(labelFont);// 轴数值

			  // Lable(Math.PI/3.0)度倾斜
			  // domainAxis.setCategoryLabelPositions(CategoryLabelPositions
			  // .createUpRotationLabelPositions(Math.PI / 3.0));

			  domainAxis.setMaximumCategoryLabelWidthRatio(1.0f);// 横轴上的 Lable 是否完整显示

			  // 设置距离图片左端距离
			  domainAxis.setLowerMargin(0.1);
			  // 设置距离图片右端距离
			  domainAxis.setUpperMargin(0.1);
			  // 设置 columnKey 是否间隔显示
			  // domainAxis.setSkipCategoryLabelsToFit(true);

			  plot.setDomainAxis(domainAxis);
			  // 设置柱图背景色(注意,系统取色的时候要使用16位的模式来查看颜色编码,这样比较准确)
			  plot.setBackgroundPaint(new Color(255, 255, 204));

			  // y轴设置
			  ValueAxis rangeAxis = plot.getRangeAxis();
			  rangeAxis.setLabelFont(labelFont);
			  rangeAxis.setTickLabelFont(labelFont);
			  // 设置最高的一个 Item 与图片顶端的距离
			  rangeAxis.setUpperMargin(0.15);
			  // 设置最低的一个 Item 与图片底端的距离
			  rangeAxis.setLowerMargin(0.15);
			  rangeAxis.setLabelAngle(1.6);//标签字体的方向  
			  plot.setRangeAxis(rangeAxis);

			  BarRenderer renderer = new BarRenderer();
			  // 设置柱子宽度
			  renderer.setMaximumBarWidth(0.05);
			  // 设置柱子高度
			  renderer.setMinimumBarLength(0.2);
			  // 设置柱子边框颜色
			  renderer.setBaseOutlinePaint(Color.BLACK);
			  // 设置柱子边框可见
			  renderer.setDrawBarOutline(true);

			  // // 设置柱的颜色
			  renderer.setSeriesPaint(0, new Color(204, 255, 255));
			  renderer.setSeriesPaint(1, new Color(153, 204, 255));
			  renderer.setSeriesPaint(2, new Color(51, 204, 204));

			  // 设置每个地区所包含的平行柱的之间距离
			  renderer.setItemMargin(0.0);

			  // 显示每个柱的数值,并修改该数值的字体属性
			// renderer.setIncludeBaseInRange(true);
			  renderer
			    .setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
			  renderer.setBaseItemLabelsVisible(true);

			  plot.setRenderer(renderer);
			  // 设置柱的透明度
			  plot.setForegroundAlpha(1.0f);
			  
			// 图表图像写入到临时目录
				ChartRenderingInfo info = new ChartRenderingInfo(
						new StandardEntityCollection());
				
				filename = ServletUtilities.saveChartAsPNG(chart, width, height,
						info, session);
				// Write the image map to the PrintWriter
				ChartUtilities.writeImageMap(pw, filename, info, true);
				pw.flush();
			
			
		}catch (Exception e) {
			System.out.println("Exception - " + e.toString());
			e.printStackTrace(System.out);
			filename = "picture_error.png";
		}
		return filename;
	}
	
	
	// 柱状图 数据集
	 public static CategoryDataset getBarData(double[][] data, String[] rowKeys,
	   String[] columnKeys) {
	  return DatasetUtilities
	    .createCategoryDataset(rowKeys, columnKeys, data);

	 }
}

 

 

 

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
DefaultPieDataset piedataset=(DefaultPieDataset)request.getAttribute("piedataset"); 						
String p = ChartUtil.generatePieChart(piedataset," 职位分布情况统计",400,400,null, new PrintWriter(out));    
String p1 = request.getContextPath() + "/servlet/DisplayChart?filename=" + p; 
%>
<img src="<%= p1 %>" width=400 height=400 border=0 usemap="#<%= p %>"/>

 

分享到:
评论

相关推荐

    JFreeChar生成饼图

    JFreeChart是一款强大的开源Java图表库,它允许开发者创建各种复杂的图表,如柱状图、折线图、饼图、散点图等,广泛应用于数据分析、报告生成以及可视化应用中。在这个小案例中,我们将深入探讨如何使用JFreeChart...

    JFreeChar生成饼图示例子

    JFreeChar生成饼图图片详细JAVA代码,直接导入eclipse即可使用。

    jfreechar 实现生成柱状图,饼图,曲线,

    JFreeChart 是一个开源的Java库,用于生成各种类型的图表,包括柱状图、饼图和曲线图等。它提供了一种灵活的方式来创建高质量的2D图表,可以在各种Java应用程序中使用,例如桌面应用、Web应用或者服务器端应用。下面...

    strut2+jfreechar生成图表

    JFreeChart则是一个强大的Java库,用于生成各种图表,如折线图、柱状图、饼图等,适用于数据可视化。将这两者结合,我们可以创建交互式、动态的Web应用,以直观地展示复杂的数据。 首先,集成JFreeChart到Struts2...

    JFreeChar图表生成柱状图和饼状图源码

    在"JFreeChar图表生成柱状图和饼状图源码"的压缩包中,我们很可能找到了创建这两种图表的示例源代码。 柱状图是一种常用的数据可视化工具,它将数据的每个类别表示为一个垂直或水平的矩形条,长度表示数值大小。...

    jfreechar统计表生成插件

    以下是一个简单的柱状图生成示例: ```java import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.data.category.DefaultCategoryDataset; public class ChartExample { ...

    jfreeChar 折线图+柱形图(混合图) +最新Jar包及例子

    JFreeChart 是一个开源的Java库,用于生成高质量的、多样的图表,包括折线图、柱形图、饼图、散点图等。在这个特定的案例中,我们关注的是如何利用JFreeChart来创建折线图和柱形图的混合图表,这种图表在数据可视化...

    JFreeChar 动态横向柱状图

    JFreeChar 动态横向柱状图,带纵向滚动条,可根据数据自动计算滚动条长度,可自定义系统柱子颜色,定时刷新

    JFreeChar制作饼图和柱状图

    3. **生成柱状图:** 使用`ChartFactory.createBarChart()`方法创建柱状图。 ```java JFreeChart chart = ChartFactory.createBarChart( "柱状图示例", // 图表标题 "分类", // X轴标签 "值", // Y轴标签 ...

    JFreeChar 柱图实现

    ### JFreeChart 柱图实现详解 #### 引言 在数据分析与展示领域,柱状图(Bar Chart)是一种非常常见的数据可视化工具,它能够直观地比较不同类别的数值大小,尤其适用于显示离散数据集。JFreeChart作为Java平台上...

    JfreeChar学习资料 JfreeChar学习资料

    JFreeChart 是一个用于Java平台的开源图表库,它提供了丰富的图表类型,包括柱状图、饼图、线形图、散点图、甘特图等,使得开发者能够方便地在应用程序中生成高质量的可视化数据。本学习资料将深入探讨JFreeChart的...

    jfreechar 整合struts2.1.8版本生成线图,饼图,柱形图

    jfreechar 整合struts2.1.8版本生成线图,饼图,柱形图 直接导入eclipse 或myeclipse 即可运行,里面含有lib ,及运行详细说 如:&lt;!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts ...

    jfreechar各种图

    它允许开发人员通过简单的API调用来生成高质量的图表,并且支持自定义样式和外观,以满足不同项目的需求。 1. **JFreeChart的基本使用**: JFreeChart库提供了一个图形用户界面,开发者可以通过设置参数来创建不同...

    JFreechar简单报表例子

    它提供了丰富的图表类型,包括柱状图、饼图、线图、散点图、面积图、甘特图等,广泛应用于数据分析、报表制作以及各种Java应用程序中。JFreeChart通过其强大的API,使得开发者能够轻松地在程序中集成图表功能,动态...

    JfreeChar教程与实例

    如果你需要在PPT中展示图表,可以将JFreeChart生成的图表导出为图片,然后插入到PowerPoint中。 此外,JFreeChart还提供了对甘特图的支持,这在项目管理中非常有用。通过`GanttChartDemo`类的示例,你可以学习如何...

    jfreechar教程

    JFreeChart 是一个流行的开源Java库,用于生成高质量的图表。这个库广泛应用于各种Java应用程序中,包括Web应用、桌面应用以及报告和数据分析工具。JFreeChart 支持多种图表类型,如饼图、柱状图、线图、散点图、...

    jfreechar完整的例子

    这个压缩包“JfreeChar完整的例子”包含了使用JFreeChart创建图表的详细示例,既有在Web环境下运行的例子,也有通过main方法直接执行的Java应用。 首先,我们来了解一下JFreeChart的基本使用。在Java程序中,你可以...

    jfreechar 例子下载

    在"jfreechar 例子下载"这个资源中,你将获得两个展示JFreeChart功能的示例,一个可能是饼图示例,另一个可能是条形图或线形图示例。这些例子对于理解和学习如何在Java项目中使用JFreeChart非常有帮助。 首先,我们...

    jfreechar画图源代码

    JFreeChart是一款强大的Java图形库,它允许开发者创建多种类型的图表,如饼状图、柱状图、曲线图等,广泛应用于数据可视化和报告生成。本资料提供的"jfreechar画图源代码"包含了作者自己编写的能运行并显示结果的...

    jfreechar统计图操作技巧

    - 创建柱状图:使用`CategoryDataset`接口创建数据集,然后用`JFreeChart`的`createBarChart()`方法生成图表。 - 自定义颜色:通过设置`Renderer`,可以改变每个条形的颜色。 - 标签和标签角度:调整`...

Global site tag (gtag.js) - Google Analytics