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 };
}
}
分享到:
相关推荐
3. **统计图类型工具类**: 提到的“定义统计图类型的工具类”可能是开发人员为了简化操作或者增强JFreeChart功能而编写的辅助类。这类工具通常包含静态方法,可以快速设置图表类型、数据源转换或自定义样式。比如,...
制图对象是JFreechart类的实例,代表着一种制图类型。例如,创建一个柱形图,首先需要创建一个柱形图的制图对象JFreechart。数据集合是用于存储图表数据的对象,JFreechart组件提供了多种类型的数据集合,如 ...
在封装JFreeChart的过程中,开发者可能会创建一个或多个工具类,这些类包含了创建和配置图表的常用方法。这样做的好处是代码结构更清晰,重复代码减少,同时也便于后期维护和扩展。例如,可以有一个`ChartUtils`类,...
1. **导入依赖**:将jfreechart.jar添加到项目的类路径中,或者通过Maven或Gradle等构建工具管理依赖。 2. **创建数据集**:根据需要的图表类型,创建对应的数据集对象,填充数据。 3. **创建图表**:使用`...
**JFreeChart 开发工具详解** 在Java编程领域,数据可视化是至关重要的,它能够将复杂的数据以直观、易于理解的方式展示出来。JFreeChart就是这样一款强大的开源库,专为Java开发者提供了绘制各种统计图表的功能,...
在Java编程领域,JFreeChart库是一个非常强大的工具,它允许开发者创建各种复杂的图表和报表,包括线图、柱状图、饼图、散点图等。本示例主要介绍如何利用JFreeChart来绘制报表图片,并提供了一个可以直接使用的demo...
**JFreeChart 类包详解** JFreeChart 是一个流行的开源Java库,用于创建高质量的数据可视化图表。这个类包包括了gnujaxp....无论是在报表系统、数据分析工具还是科学计算环境中,JFreeChart都是Java开发者的重要选择。
为了使用JFreeChart,你需要将提供的jar包添加到你的项目类路径中,并通过其API创建和配置图表。例如,创建一个简单的柱状图可能包括以下步骤: 1. 创建`CategoryDataset`对象,存储分类数据。 2. 使用`JFreeChart`...
**正文** JFreeChart 是一个强大的Java库,用于创建高质量的图表,包括线图、柱状图、饼图、散点图以及更多复杂图形。...无论是为了教学、分析还是展示,JFreeChart都是Java环境中一个非常有价值的工具。
在本文中,我们将深入探讨 JFreeChart 的核心类和它们在创建图表过程中的作用。 1. **JFreeChart 类**: 这是所有图表的基础,它代表了图表对象。你可以通过 JFreeChart 工厂类创建各种类型的图表,例如饼图、柱状...
**JFreeChart 工具生成统计图的几种方法** 在当今的互联网环境中,动态和交互式的数据展示变得越来越重要。JFreeChart 是一个强大的 Java 库,专门用于生成各种统计图表,包括饼图、柱状图、线图、区域图等,适用于...
"工具" 标签则表明 JFreeChart 是一种开发工具,有助于软件工程师在他们的项目中快速生成图表。 压缩包中的 "JFreeChart-API.chm" 文件是 JFreeChart 的 API 文档,通常包含了类、方法、接口的详细说明,是开发者...
总之,JFreeChart 是 Java 平台上数据可视化的强大工具,通过 `jfreechart demo`,开发者可以快速掌握其基本用法并实现各种复杂的图表。无论你是初学者还是有经验的开发者,这个 demo 集都将为你提供宝贵的实践经验...
jcommon 是 JFreeChart 的基础库,它包含了一些通用的工具类和组件,例如颜色管理、日期时间处理、几何形状等。这个库是 JFreeChart 能够正常工作所必需的,因为它为 JFreeChart 提供了底层的支持,比如图形绘制和...
在 Java 后台开发中,数据的图形化表示能够帮助用户更直观地理解复杂的数据信息,而 JFreeChart 正是实现这一目标的关键工具。 **JFreeChart 的核心功能:** 1. **多类型的图表**:JFreeChart 支持多种图表类型,...
在Java应用程序中,JFreeChart经常被用于数据分析和可视化,尤其在报表系统、数据分析工具或者任何需要展示数据图形化的场景中。"jfreechart所需jar包.zip"是一个包含了使用JFreeChart库所必需的Java归档(JAR)文件...
在这个主题中,我们将深入探讨"JFreeChart柱状图的类的封装",了解如何利用这个库来创建柱状图以及相关的类和工具。 首先,JFreeChart的核心类之一是`CategoryPlot`,它是柱状图的基础。`CategoryPlot`负责管理类别...
ChartUtilities 工具类是 JFreeChart 库中的一个工具类,该类提供了多种图表工具方法,包括图表的保存、打印等。 ### JFreeChart 图表对象 JFreeChart 图表对象是 JFreeChart 库中的一个重要对象,该对象用于存储...
JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图...