`
c125543072
  • 浏览: 30121 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JFreechart工具类

阅读更多
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.NumberFormat;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import org.jfree.chart.ChartFactory;
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.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.renderer.category.BarRenderer3D;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.ui.TextAnchor;

public class JFreeChartUtil {

	/**
	 * 根据参数创建曲线图
	 * 
	 * @author HeCheng
	 * @time 2010-12-13 15:56:42
	 * 
	 * @return
	 */
	public static String[] createLineChartByCategoryDataset(
			CategoryDataset dataset, String firstTitle, String subTitle,
			int width, int height, int min, int max) {
		int pieWidth = getLineWidth(width);
		int pieHeight = getlineHeight(height);
		String fileName = "";
		String fileUrl = "";
		JFreeChart chart = ChartFactory.createLineChart(firstTitle, "", "",
				dataset, PlotOrientation.VERTICAL, true, true, true);
		chart.setBackgroundPaint(Color.white);

		// 设置子标题
		TextTitle subtitle = new TextTitle(subTitle, new Font("黑体", Font.BOLD,
				12));
		chart.addSubtitle(subtitle);
		
		Font titleFont = new Font("宋体", Font.PLAIN, 25); // 图片标题
		Font itemfont = new Font("宋体", Font.PLAIN, 15);// 图示字体
		chart.getTitle().setFont(titleFont);
		chart.getLegend().setItemFont(itemfont); // 设置最底下方框内的字体(图示)
		chart.getLegend().setVisible(false);// 不显示图示
		// 其他参数
		final CategoryPlot plot = (CategoryPlot) chart.getPlot();
		CategoryItemRenderer cgir = plot.getRenderer();
		// 在数量点上显示数值
		cgir.setBaseItemLabelsVisible(true);
		cgir.setBasePositiveItemLabelPosition(new ItemLabelPosition(
				ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
		cgir
				.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
		// 设置数值字体
		cgir.setBaseItemLabelFont(new Font("Dialog", 0, 12));
		// 是否显示数值
		cgir.setBaseItemLabelsVisible(true);
		// 回传
		plot.setRenderer(cgir);
		// 背景色,线条色
		plot.setBackgroundPaint(Color.white);
		plot.setRangeGridlinePaint(Color.pink);

		// 线条属性
		NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
		rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
		rangeAxis.setLowerBound(min);
		rangeAxis.setUpperBound(max);
		rangeAxis.setAutoRangeIncludesZero(false);

		// 其他属性
		final LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot
				.getRenderer();
		renderer.setDrawOutlines(true);

		renderer.setSeriesStroke(0, new BasicStroke(2.0f,
				BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 1.0f,
				new float[] { 10.0f, 6.0f }, 0.0f));
		renderer.setSeriesStroke(1, new BasicStroke(2.0f,
				BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 1.0f,
				new float[] { 6.0f, 6.0f }, 0.0f));
		renderer.setSeriesStroke(2, new BasicStroke(2.0f,
				BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 1.0f,
				new float[] { 2.0f, 6.0f }, 0.0f));
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpSession session = request.getSession();
		try {
			fileName = ServletUtilities.saveChartAsPNG(chart, pieWidth,
					pieHeight, null, session);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		fileUrl = request.getContextPath() + "/DisplayChart?filename="
				+ fileName;
		return new String[] { fileName, fileUrl };
	}

	/**
	 * 获取曲线图默认宽度
	 * 
	 * @param width
	 * @return
	 */
	public static int getLineWidth(int width) {
		switch (width) {
		case 0:
			return 350;
		case 1:
			return 1000;
		default:
			return width;
		}
	}

	/**
	 * 获取曲线图默认高度
	 * 
	 * @param width
	 * @return
	 */
	public static int getlineHeight(int height) {
		switch (height) {
		case 0:
			return 300;
		case 1:
			return 560;
		default:
			return height;
		}
	}

	/**
	 * 根据参数创建饼图
	 * 
	 * @author HeCheng
	 * @time 2010-12-10 09:57:29
	 * @param dataset
	 * @return
	 */
	public static String[] createPieChartByDefaultPieDataset(
			DefaultPieDataset dataset, String imageName, int width, int height) {
		int pieWidth = getPieWidth(width);
		int pieHeight = getPieHeight(height);
		String fileName = "";
		String fileUrl = "";
		JFreeChart chart = ChartFactory.createPieChart(imageName, dataset,
				true, false, false);
		PiePlot pieplot = (PiePlot) chart.getPlot();

		// 设置标题栏字体
		chart.getTitle()
				.setFont(new Font("宋体", com.lowagie.text.Font.BOLD, 20));

		// 设置图块标识字体
		pieplot.setLabelFont(new Font("宋体", com.lowagie.text.Font.BOLD, 12));

		// 设置背景颜色
		pieplot.setBackgroundPaint(Color.white);

		// 设置饼图边框是否显示
		pieplot.setOutlineVisible(false);

		// 设置下方类别字体
		chart.getLegend().setItemFont(
				new Font("宋体", com.lowagie.text.Font.BOLD, 12));

		// 设置每一个方块里显示的内容,为name:数量(百分比),第2和第3个参数为格式化
		pieplot.setLabelGenerator(new StandardPieSectionLabelGenerator(
				"{0}:{1}({2}) ", NumberFormat.getNumberInstance(),
				new DecimalFormat("0.0000%")));

		HttpServletRequest request = ServletActionContext.getRequest();
		HttpSession session = request.getSession();
		try {
			fileName = ServletUtilities.saveChartAsPNG(chart, pieWidth,
					pieHeight, null, session);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		fileUrl = request.getContextPath() + "/DisplayChart?filename="
				+ fileName;
		return new String[] { fileName, fileUrl };
	}

	/**
	 * 获取饼图默认宽度
	 * 
	 * @param width
	 * @return
	 */
	public static int getPieWidth(int width) {
		switch (width) {
		case 0:
			return 700;
		case 1:
			return 1000;
		default:
			return width;
		}
	}

	/**
	 * 获取饼图默认高度
	 * 
	 * @param width
	 * @return
	 */
	public static int getPieHeight(int height) {
		switch (height) {
		case 0:
			return 450;
		case 1:
			return 560;
		default:
			return height;
		}
	}

	/**
	 * 根据参数创建柱形图
	 * 
	 * @author HeCheng
	 * @time 2010-12-10 09:59:46
	 * @return
	 */
	public String[] createBarChartByDefaultCategoryDataset(
			DefaultCategoryDataset dataset) {
		String fileName = "";
		String fileUrl = "";
		// 第3个boolean值表示是否显示dataset的第二项
		JFreeChart chart = ChartFactory.createBarChart3D("肉类销量统计图", "四省对比情况",
				"销量", dataset, PlotOrientation.VERTICAL, true, true, true);

		CategoryPlot plot = chart.getCategoryPlot();// 获取图表区域对象
		CategoryAxis domainAxis = plot.getDomainAxis();

		// 设置标题字体
		chart.getTitle().setFont(new Font("宋体", Font.BOLD, 20));
		// 小标题字体
		domainAxis.setLabelFont(new Font("黑体", Font.BOLD, 14));
		// 各项字体(柱形下方)
		domainAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 12));
		// 垂直标题
		ValueAxis rangeAxis = plot.getRangeAxis();// 获取柱状
		// 数值单位字体
		rangeAxis.setLabelFont(new Font("黑体", Font.BOLD, 15));
		// 各项字体(最下方)
		chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15));

		CategoryPlot plot1 = chart.getCategoryPlot();
		// 设置网格背景颜色
		// plot1.setBackgroundPaint(Color.white);
		// 设置网格竖线颜色
		// plot1.setDomainGridlinePaint(Color.pink);
		// 设置网格横线颜色
		plot1.setRangeGridlinePaint(Color.pink);
		// 显示每个柱的数值,并修改该数值的字体属性
		BarRenderer3D renderer = new BarRenderer3D();
		renderer
				.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
		renderer.setBaseItemLabelsVisible(true);
		// 默认的数字显示在柱子中,通过如下两句可调整数字的显示
		// 将数字显示出来
		renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(
				ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
		renderer.setItemLabelAnchorOffset(10D);
		// 设置每个地区所包含的平行柱的之间距离
		renderer.setItemMargin(0.2);
		plot1.setRenderer(renderer);

		HttpServletRequest request = ServletActionContext.getRequest();
		HttpSession session = request.getSession();
		try {
			fileName = ServletUtilities.saveChartAsPNG(chart, 500, 300, null,
					session);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		fileUrl = request.getContextPath() + "/DisplayChart?filename="
				+ fileName;
		return new String[] { fileName, fileUrl };
	}

}

分享到:
评论

相关推荐

    Jfreechart包和工具类

    3. **统计图类型工具类**: 提到的“定义统计图类型的工具类”可能是开发人员为了简化操作或者增强JFreeChart功能而编写的辅助类。这类工具通常包含静态方法,可以快速设置图表类型、数据源转换或自定义样式。比如,...

    JFreechart教程与实例

    制图对象是JFreechart类的实例,代表着一种制图类型。例如,创建一个柱形图,首先需要创建一个柱形图的制图对象JFreechart。数据集合是用于存储图表数据的对象,JFreechart组件提供了多种类型的数据集合,如 ...

    关于JFreeChart的封装,配合注解的实现,开发中

    在封装JFreeChart的过程中,开发者可能会创建一个或多个工具类,这些类包含了创建和配置图表的常用方法。这样做的好处是代码结构更清晰,重复代码减少,同时也便于后期维护和扩展。例如,可以有一个`ChartUtils`类,...

    java图形工具 jfreechart全套图形工具及文档源码一网打尽

    1. **导入依赖**:将jfreechart.jar添加到项目的类路径中,或者通过Maven或Gradle等构建工具管理依赖。 2. **创建数据集**:根据需要的图表类型,创建对应的数据集对象,填充数据。 3. **创建图表**:使用`...

    JFreechart开发工具

    **JFreeChart 开发工具详解** 在Java编程领域,数据可视化是至关重要的,它能够将复杂的数据以直观、易于理解的方式展示出来。JFreeChart就是这样一款强大的开源库,专为Java开发者提供了绘制各种统计图表的功能,...

    JAVA jfreechart绘制报表图片工具类

    在Java编程领域,JFreeChart库是一个非常强大的工具,它允许开发者创建各种复杂的图表和报表,包括线图、柱状图、饼图、散点图等。本示例主要介绍如何利用JFreeChart来绘制报表图片,并提供了一个可以直接使用的demo...

    jfreechart类包

    **JFreeChart 类包详解** JFreeChart 是一个流行的开源Java库,用于创建高质量的数据可视化图表。这个类包包括了gnujaxp....无论是在报表系统、数据分析工具还是科学计算环境中,JFreeChart都是Java开发者的重要选择。

    jfreechart-1.0.19工具

    为了使用JFreeChart,你需要将提供的jar包添加到你的项目类路径中,并通过其API创建和配置图表。例如,创建一个简单的柱状图可能包括以下步骤: 1. 创建`CategoryDataset`对象,存储分类数据。 2. 使用`JFreeChart`...

    JFreeChart 官方例子 JFReeChart Dome

    **正文** JFreeChart 是一个强大的Java库,用于创建高质量的图表,包括线图、柱状图、饼图、散点图以及更多复杂图形。...无论是为了教学、分析还是展示,JFreeChart都是Java环境中一个非常有价值的工具。

    jfreechart的一个小总结

    在本文中,我们将深入探讨 JFreeChart 的核心类和它们在创建图表过程中的作用。 1. **JFreeChart 类**: 这是所有图表的基础,它代表了图表对象。你可以通过 JFreeChart 工厂类创建各种类型的图表,例如饼图、柱状...

    利用JFreeChart工具生成统计图的几种方法.doc

    **JFreeChart 工具生成统计图的几种方法** 在当今的互联网环境中,动态和交互式的数据展示变得越来越重要。JFreeChart 是一个强大的 Java 库,专门用于生成各种统计图表,包括饼图、柱状图、线图、区域图等,适用于...

    jfreechart

    "工具" 标签则表明 JFreeChart 是一种开发工具,有助于软件工程师在他们的项目中快速生成图表。 压缩包中的 "JFreeChart-API.chm" 文件是 JFreeChart 的 API 文档,通常包含了类、方法、接口的详细说明,是开发者...

    jfreechart demo

    总之,JFreeChart 是 Java 平台上数据可视化的强大工具,通过 `jfreechart demo`,开发者可以快速掌握其基本用法并实现各种复杂的图表。无论你是初学者还是有经验的开发者,这个 demo 集都将为你提供宝贵的实践经验...

    jfreechart使用的3个jar包

    jcommon 是 JFreeChart 的基础库,它包含了一些通用的工具类和组件,例如颜色管理、日期时间处理、几何形状等。这个库是 JFreeChart 能够正常工作所必需的,因为它为 JFreeChart 提供了底层的支持,比如图形绘制和...

    jfreechart依赖jar包

    在 Java 后台开发中,数据的图形化表示能够帮助用户更直观地理解复杂的数据信息,而 JFreeChart 正是实现这一目标的关键工具。 **JFreeChart 的核心功能:** 1. **多类型的图表**:JFreeChart 支持多种图表类型,...

    jfreechart所需jar包.zip

    在Java应用程序中,JFreeChart经常被用于数据分析和可视化,尤其在报表系统、数据分析工具或者任何需要展示数据图形化的场景中。"jfreechart所需jar包.zip"是一个包含了使用JFreeChart库所必需的Java归档(JAR)文件...

    JFreeChart柱状图的类的封装

    在这个主题中,我们将深入探讨"JFreeChart柱状图的类的封装",了解如何利用这个库来创建柱状图以及相关的类和工具。 首先,JFreeChart的核心类之一是`CategoryPlot`,它是柱状图的基础。`CategoryPlot`负责管理类别...

    java利用jfreechart绘制excel.pdf

    ChartUtilities 工具类是 JFreeChart 库中的一个工具类,该类提供了多种图表工具方法,包括图表的保存、打印等。 ### JFreeChart 图表对象 JFreeChart 图表对象是 JFreeChart 库中的一个重要对象,该对象用于存储...

    jfreechart-1.0.13

    JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图...

Global site tag (gtag.js) - Google Analytics