`
cui09
  • 浏览: 116570 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
最近访客 更多访客>>
社区版块
存档分类
最新评论

用JFreeChart画统计分析柱状图(成功版)

阅读更多
用JFreeChart画统计分析柱状图(成功版)
[ 2006-6-19 17:38:00 | By: blueroc ]
 
 

JFreeChart API http://www.jfree.org/jfreechart/javadoc/

JFreeChart库包的简介

及 成功运行的例子(直接在jsp中显示chart)

org.jfree.chart
这个包包含JfreeChart类库中主要的类和接口

org.jfree.chart.annotations
这个包提供了一套给Chart增加小文字和图片项的机制,通常是为了润色特定的数据项。

org.jfree.chart.axis
这个包包含所有轴有关的类和接口:
a.CategoryPlot 和 XYPlot 操作两个轴(默认),我们叫他们domain轴和range轴。这些专用名词是建立这些地图可视化地把domain轴的值映射到value轴上的概念之上。
效果上,domain轴作为x轴,range作为y轴,但我们更热衷与专用名词
b.轴类提供的默认设置基本适合大多数程序的需要,但是,有很多通过JFreeChartAPI改变属性来定制轴的特性。一定要通过读API来熟悉可以定制的选项。
c.JFreeChart的一个更强大的功能是同一个Chart可以提供多个domain轴和多个value轴
轴类是可克隆和可串行化的。

org.jfree.chart.entity
这个包包括展现Chart中实体的类

org.jfree.chart.event
这个包包括跟改变Chart属性相关的发送和接收事件有关的类和接口。默认,库中的类自动把他们注册给其他类,所以他们会自动接收事件并相应地起作用。更大程度上,你只需要简单地依赖默认的行为。

org.jfree.chart.imagemap
这个包包括创建HTML图像映射的类和接口,图像能用ChartUtilities创建,典型例子是来自servlet。

org.jfree.chart.labels
这个包包括为个别数据产生标签的类和接口,有两种标签类型:
a.item labels --作为chart一部分的小文字标签
b.tooltips -- 当鼠标滑到数据项时展示的文字

org.jfree.chart.needle
这个包包括在圆形图中画指针的类和接口

org.jfree.chart.plot
这个包包括:
a.Plot基类
b.一系列Plot的子类
c.各种支持的类和接口
这是一个很重要的包,因为Plot类在JFreeChart中控制和展示数据中起着关键作用

org.jfree.chart.renderer
这个包包括用来扩展渲染器的类和接口,渲染器是一个负责在CategoryPlot或XYPlot上画出个性化的数据项。
渲染器或通过修改现有属性或扩充一个新的渲染器来提供一定程度上Chart外表改变。

org.jfree.chart.servlet
这个包包括Servlet的辅助类

org.jfree.chart.title
这个包包括作为Chart标题或子标题的类,JFreeChart操作一个标题和多个子标题,当画chart的时候,标题和子标题会占用一块空间来画他们自己,这样画图空间就少了,所以尽管对子标题的数目没有限制,但你经可能的少用子标题。

org.jfree.chart.ui
这个包包括改变Chart属性的用户界面类,这个包是可选的,他们用在示例程序中,如果你的程序用不到他们,你不需要把他包括进你的应用程序。

org.jfree.chart.urls
这个包支持在HTML图片上添加URL

org.jfree.data
这个包包括为JFreeChart提供数据集的类和接口。在设计JFreeChart的一个原则就是数据和展示完全分开,所以,在数据集的类里面你找不到任何与展示有关的属性和方法。

org.jfree.data.statistics
这个包包括展示数据统计的类和接口

org.jfree.data.time
这个包包括展示基于时间的数据的类和接口。
TimeSeriesCollection应该是最重要的类,他用来存储一个或多个TimeSeries对象,并提过一个对XYDataset接口的扩展,这样他被允许作为XYPlot的一个数据集。
TimePeriodValuesCollection这个类执行相似的功能,但是可以用更通用的时间段。

org.jfree.data.xml
这个包包括支持从XML文件读取数据集的类和接口。

 

 我们介绍使用 JFreeChart 生成柱状图,首先从一个最简单的例子开始。
一 最简单的例子 为了降低门槛,让大家心理有个底,先介绍一个简单的不能再简单的例子,图片中的各类属性都采用默认值。 <%@ page contentType="text/html;charset=GBK"%><BR>
<%@ page import="org.jfree.chart.ChartFactory,<BR>
org.jfree.chart.JFreeChart,<BR>
org.jfree.chart.plot.PlotOrientation,<BR>
org.jfree.chart.servlet.ServletUtilities,<BR>
org.jfree.data.DefaultCategoryDataset"%><BR>
<%
<BR>
DefaultCategoryDataset dataset = new DefaultCategoryDataset();<BR>
dataset.addValue(300, "广州", "苹果");<BR>
dataset.addValue(200, "广州", "梨子");<BR>
dataset.addValue(500, "广州", "葡萄");<BR>
dataset.addValue(340, "广州", "芒果");<BR>
dataset.addValue(280, "广州", "荔枝");<BR>
JFreeChart chart = ChartFactory.createBarChart3D("水果销量统计图",
"水果",
"销量",dataset,
PlotOrientation.VERTICAL,
false,
false,
false);<BR>
String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session);<BR>
String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;<BR>
%>
<IMG height=300 src="<%= graphURL %>" width=500 useMap="#<%= filename %>" border=0>
这个 JSP 程序运行的结果如下图



图 一

二 柱状图高级特性
        上面的程序简单,但生成的柱状图也很简单。更多的时候,我们可能需要不同的效果。org.jfree.chart.ChartFactory 这个工厂类有createBarChart,createStackedBarChart,createBarChart3D,createStackedBarChart3D这几个工厂方法创建不同类型的柱状图。关于这四个方法的 JFreeChart 的 Java Doc API 文档有详细说明,比较重要的是 PlotOrientation.VERTICAL 让平行柱垂直显示,而 PlotOrientation.HORIZONTAL 则让平行柱水平显示。
几个对柱状图影响较大的几个类,它们分别是:
org.jfree.chart.axis.CategoryAxis
org.jfree.chart.axis.ValueAxis
org.jfree.chart.renderer.BarRenderer
org.jfree.chart.renderer.BarRenderer3D
我们还是以实例来说明这几个类,先来假设一个需要统计的数据表:
根据上表数据,首先构造 CategoryDataset, 这里不再使用上面简单例子里面的 DefaultCategoryDataset 类,而是 DatasetUtilities 更有效的构造 CategoryDataset,如下列代码:

double[][] data = new double[][] {{672, 766, 223, 540, 126}, {325, 521, 210, 340, 106}, {332, 256, 523, 240, 526} };
String[] rowKeys = {"苹果","梨子","葡萄"};
String[] columnKeys = {"北京","上海","广州","成都","深圳"};
CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);

用上面的 dataset 生成的 3D 柱状图


图 二

org.jfree.chart.axis.CategoryAxis
CategoryAxis domainAxis = plot.getDomainAxis();
//设置 columnKey 是否垂直显示
domainAxis.setVerticalCategoryLabels(true);
//设置距离图片左端距离
domainAxis.setLowerMargin(0.1);
//设置距离图片右端距离
domainAxis.setUpperMargin(0.1);
//设置 columnKey 是否间隔显示
domainAxis.setSkipCategoryLabelsToFit(true);
plot.setDomainAxis(domainAxis);
上面代码产生的效果如下图,注意与图二的区别。


图 三

org.jfree.chart.axis.ValueAxis

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

上面代码产生的效果如下图,注意与图二的区别。


图 四

org.jfree.chart.renderer.BarRenderer3D


BarRenderer3D renderer = new BarRenderer3D();
renderer.setBaseOutlinePaint(Color.BLACK);
//设置 Wall 的颜色
renderer.setWallPaint(Color.gray);
//设置每种水果代表的柱的颜色
renderer.setSeriesPaint(0, new Color(0, 0, 255));
renderer.setSeriesPaint(1, new Color(0, 100, 255));
renderer.setSeriesPaint(2, Color.GREEN);
//设置每种水果代表的柱的 Outline 颜色
renderer.setSeriesOutlinePaint(0, Color.BLACK);
renderer.setSeriesOutlinePaint(1, Color.BLACK);
renderer.setSeriesOutlinePaint(2, Color.BLACK);
//设置每个地区所包含的平行柱的之间距离
renderer.setItemMargin(0.1);
//显示每个柱的数值,并修改该数值的字体属性
renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setItemLabelFont(new Font("黑体",Font.PLAIN,12));
renderer.setItemLabelsVisible(true);

上面代码产生的效果如下图,注意与图二的区别。


图 五

补充两个有用的方法
补充 org.jfree.chart.plot.CategoryPlot 的两个方法,这两个方法对所有类型的图表都有作用,因为在前面没有介绍,这里补充一下。


//设置地区、销量的显示位置
plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);

上面代码产生的效果如下图,注意与图二的区别。


图 六

三 完整范例
前面都是一些代码片段,现在把这些片段组合成一个完整范例。

<DIV class=code>
<%@ page contentType="image/jpeg;charset=GBK"%>
<%@ page import="java.awt.Font"%>
<%@ page import="java.awt.Color"%>
<%@ page import="org.jfree.chart.ChartFactory"%>
<%@ page import="org.jfree.chart.JFreeChart"%>
<%@ page import="org.jfree.chart.plot.PlotOrientation"%>
<%@ page import="org.jfree.chart.servlet.ServletUtilities"%>
<%@ page import="org.jfree.data.general.DatasetUtilities"%>
<%@ page import="org.jfree.data.DataUtilities"%>
<%@ page import="org.jfree.chart.plot.CategoryPlot"%>
<%@ page import="org.jfree.chart.axis.CategoryAxis"%>
<%@ page import="org.jfree.chart.axis.ValueAxis"%>
<%@ page import="org.jfree.chart.renderer.category.BarRenderer3D"%>
<%@ page import="org.jfree.chart.labels.StandardCategoryItemLabelGenerator"%>
<%@ page import="org.jfree.chart.axis.AxisLocation"%>
<%@ page import="org.jfree.data.category.CategoryDataset"%>
<%
double[][] data = new double[][] {
{672, 766, 223, 540, 126},
{325, 521, 210, 340, 106},
{332, 256, 523, 240, 526}
};
String[] rowKeys = {"苹果","梨子","葡萄"};
String[] columnKeys = {"北京","上海","广州","成都","深圳"};
CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);
JFreeChart chart = ChartFactory.createBarChart3D("水果销量图统计",null,null,dataset,
PlotOrientation.VERTICAL,true,false,false);
chart.setBackgroundPaint(Color.WHITE);
CategoryPlot plot = chart.getCategoryPlot();
CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setVisible(true);
plot.setDomainAxis(domainAxis);
ValueAxis rangeAxis = plot.getRangeAxis();
//设置最高的一个 Item 与图片顶端的距离
rangeAxis.setUpperMargin(0.15);
//设置最低的一个 Item 与图片底端的距离
rangeAxis.setLowerMargin(0.15);
plot.setRangeAxis(rangeAxis);
BarRenderer3D renderer = new BarRenderer3D();
renderer.setBaseOutlinePaint(Color.BLACK);
//设置 Wall 的颜色<BR>
renderer.setWallPaint(Color.gray);
//设置每种水果代表的柱的颜色
renderer.setSeriesPaint(0, new Color(0, 0, 255));
renderer.setSeriesPaint(1, new Color(0, 100, 255));
renderer.setSeriesPaint(2, Color.GREEN);
//设置每个地区所包含的平行柱的之间距离
renderer.setItemMargin(0.1);
//显示每个柱的数值,并修改该数值的字体属性<BR>
renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setItemLabelsVisible(true);
plot.setRenderer(renderer);
//设置柱的透明度<BR>
plot.setForegroundAlpha(0.6f);
//设置地区、销量的显示位置<BR>
plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
System.out.println("!!!!!!!!!"+chart);
String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session);
String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
System.out.println("!!!!!!!!!"+graphURL);
%>
<img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= filename %>">;
</DIV>
不能正确运行,要在web.xml中配置:
<!--StartFragment-->
<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 的 Java Doc API 文档和 Sample Code

在Struts中用JFreeChart生成图表

1。action 处理:

public class GraphAction extends Action {
        public ActionForward execute(ActionMapping mapping, ActionForm form,
                        HttpServletRequest request, HttpServletResponse response)
                        throws Exception {
                drawChartPicture dcp = new drawChartPicture();
                GraphLogic gl = new GraphLogic();        
                 gl.setChartInfo(request,response);
                 String img = dcp.getDrawChartInfo(request,response);
                 String graphURL = request.getContextPath()
                        + "/servlet/DisplayChart?filename=" + img;
                 if(img.length() !=0) {
                         request.setAttribute("graphname", img);
                         request.setAttribute("graphURL",graphURL);
                         return mapping.findForward("success");
                 }else {
                         return mapping.findForward("fail");
                 }
        }

}

2。页面
<html:html>
        <head>
                <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"/>
                <title></title>
        </head>
        <body>
        <logic:iterate id="graphname" indexId="id" name="graphname">
        <bean:define id="filename">
                <bean:write name="graphname" />
                </bean:define>
        </logic:iterate>
                <logic:iterate id="graphURL" indexId="id" name="graphURL">
        <bean:define id="url">
                <bean:write name="graphURL" />
                </bean:define>
        </logic:iterate>
        <html:image src="<%=url %>" width='800' height='600' border=0  usemap="#<%= filename %>"></html:image>

</body>
</html:html>

分享到:
评论

相关推荐

    JFreeChart画统计分析柱状图

    本文将详细介绍如何使用JFreeChart这一强大的Java图表库来绘制统计分析柱状图,并通过具体的示例来展示其基本用法及一些高级特性。 #### 二、基础概念介绍 JFreeChart是一款开源的Java图表库,支持多种类型的图表...

    jfreechart 生成折线图,饼图,柱状图,堆栈柱状图

    JFreeChart是一个流行的Java库,用于生成各种类型的图表,包括折线图、饼图和柱状图,甚至堆栈柱状图。这个压缩包中的"CreateChartServiceImpl.java"文件很可能包含了一个实现这些功能的服务类。 首先,我们要理解...

    java里用JFreeChart画柱状图、折线图、雷达图

    在Java编程环境中,JFreeChart库是一个强大的工具,用于创建各种复杂的图表,包括柱状图、折线图和雷达图。这些图表对于数据可视化和数据分析非常有用,可以帮助开发者直观地展示大量信息。以下是对给定文件中每个...

    jfreechart柱状图

    在商业智能和统计分析中,柱状图能够清晰地比较不同类别的数值,尤其适合于显示各类别之间的差异和整体趋势。 在 JFreeChart 中创建柱状图主要涉及以下步骤: 1. **创建 CategoryDataset**:这是柱状图的基础,...

    JFreeChart饼图、柱状图等

    除了饼图和柱状图,JFreeChart还支持线形图,这在时间序列分析中非常有用。线形图可以展示数据随时间的变化趋势,支持多系列数据,并可以设置线条样式、点样式以及轴的刻度和标签。 散点图是另一个重要的图表类型,...

    JFreeChart柱状图资料

    JFreeChart的柱状图常用于商业报告、统计分析、科学实验结果展示等场景。例如,业务分析师可以利用它来展示销售数据,科学家可以用来可视化实验结果,教育者则可能用它来解释复杂的数据关系。 7. **与Web应用集成*...

    java绘制图表(柱状图、饼图、折线图)包 jfreechart

    你可以创建一个`CategoryDataset`对象,将数据组织成类别和值,然后使用`JFreeChart`的`createBarChart()`方法来生成柱状图。 饼图是另一种常用的数据表示形式,适合显示各部分占整体的比例。JFreeChart允许你创建...

    JFreeChart+JSP实现统计图展示

    **JFreeChart** 是一个强大的Java库,它提供了多种类型的图表,包括折线图、柱状图、饼图、散点图等,可用于创建高质量的静态和动态图形。在本项目中,JFreeChart被用来生成根据后台数据定制的统计图表,以便用户...

    Struts2+JFreeChart+饼状图,柱状图,折线图

    在Struts2框架中集成JFreeChart库,可以方便地创建各种图表,如饼状图、柱状图和折线图,为数据分析和可视化提供便利。 JFreeChart是一个开源的Java类库,用于生成高质量的统计和财务图表。它支持多种图表类型,...

    JFreeChart图表,柱状图,折线图, 饼图等例子

    JFreeChart是一款强大的Java图形库,它为开发者提供了创建各种类型图表的能力,包括柱状图、折线图、饼图等。在Java编程中,如果你需要在应用中展示数据,JFreeChart是一个理想的选择,因为它提供了丰富的定制选项,...

    jfreechart 生成折线图,饼图,柱状图,堆栈柱状图

    标题中提到的“jfreechart生成折线图、饼图、柱状图、堆栈柱状图”是指使用Java的一个开源图形库JFreeChart来创建不同类型的统计图表。JFreeChart是一个功能全面、成熟的Java图表库,广泛应用于各种应用程序中进行...

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

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

    JFreeChar制作饼图和柱状图

    JFreeChart是一款强大的Java图形库,它允许开发者创建各种类型的统计图表,如饼图、柱状图、线图、散点图等。在Java应用程序中,JFreeChart为数据可视化提供了丰富的功能,使得数据的展示更为直观易懂。在本教程中,...

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

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

    jfreechart学习.rar_java 图表_jfreechart_jfreechart-1.0.9.zip_网页制作

    用JFreeChart画统计分析柱状图建站指南网页制作网页特效Flash动画网络编程素材下载教程下载建站服务HTML学习CSS学习JAVASCRIPT教程ASP技术PHP技术JSP技术ASP_NET技术数据库技术

    report图状报表(柱状图,饼状图,折线图)

    在Java中,可以使用JFreeChart库来创建柱状图,它提供了丰富的定制选项,包括颜色、标签、图例等。 **饼状图**用于显示各部分占整体的比例。在饼状图中,数据被分割成扇形,每个扇形的大小代表了相应类别的比例。这...

    JFreeChart统计图资料

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

    Spring+JFreeChart 自动生成统计图

    JFreeChart是一个强大的Java库,能够创建多种类型的图表,包括折线图、柱状图、饼图、散点图等,非常适合用于报表和数据分析应用。在Spring框架中,我们可以利用其灵活的依赖注入和AOP(面向切面编程)特性,将图表...

Global site tag (gtag.js) - Google Analytics