`

jsp中使用JFreeChart生成热点图表的详细代码

阅读更多

<一>前言:

  JFreeChart是开放源代码站点SourceForge.net上的一个JAVA项目。它的功能十分强大,能创建饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等,并可生成PNG或JPG图片格式文件。
  本人在学习过程中发现,网上很多文章都是讲一些JFreeChart的基本应用,而对JFreeChart生成热点图表这样常用的功能虽有所提及却没有一个完整的例子,所以我就写一个简单示例供大家参考,希望对大家的学习有所帮助。

  <二>示例说明:

  假设有一个关于程序员北京,上海,广洲三地程序员学历,开发语言,薪金情况的调查。首先要以饼图显示程序员学历的分布情况(index.jsp)。点击饼图的每一部分会以柱状图显示该层次程序员所用开发语言和薪金的情况(barview.jsp)。重点演示怎样在饼图上添加链接。

  <三>准备工作:

  1.下载最新版本的JFreeChart,当前为jfreechart-1.0.0-rc1
下载地址:http://www.jfree.org/jfreechart/index.html

  2.解压文件,将jfreechart-1.0.0-rc1/lib下的jcommon-1.0.0-rc1.jar,jfreechart-1.0.0-rc1.jar复制到WEB应用的lib目录下。

  3.在web.xml文件中增加以下内容:

<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>/servletDisplayChart</url-pattern>
</servlet-mapping>


  <四>饼图页面代码(index.jsp)


<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="org.jfree.data.general.DefaultPieDataset"%>
<%@ page import="org.jfree.chart.*"%>
<%@ page import="org.jfree.chart.plot.*"%>
<%@ page import="org.jfree.chart.servlet.ServletUtilities"%>
<%@ page import="org.jfree.chart.labels.StandardPieItemLabelGenerator"%>
<%@ page import="org.jfree.chart.urls.StandardPieURLGenerator"%>
<%@ page import="org.jfree.chart.entity.StandardEntityCollection"%>
<%@ page import="java.io.*"%>
<HTML>
<HEAD>
<META http-equiv=Content-Type content="text/html; charset=GBK">
<TITLE>nacl_zhuang@hotmail.com</TITLE>
</HEAD>
<BODY>
<%

DefaultPieDataset data = new DefaultPieDataset();
data.setValue("高中以下",370);
data.setValue("高中",1530);
data.setValue("大专",5700);
data.setValue("本科",8280);
data.setValue("硕士",4420);
data.setValue("博士",80);

PiePlot3D plot = new PiePlot3D(data);//3D饼图
plot.setURLGenerator(new StandardPieURLGenerator("barview.jsp"));//设定链接
JFreeChart chart = new JFreeChart("",JFreeChart.DEFAULT_TITLE_FONT, plot, true);
chart.setBackgroundPaint(java.awt.Color.white);//可选,设置图片背景色
chart.setTitle("程序员学历情况调查表");//可选,设置图片标题
plot.setToolTipGenerator(new StandardPieItemLabelGenerator());
StandardEntityCollection sec = new StandardEntityCollection();
ChartRenderingInfo info = new ChartRenderingInfo(sec);
PrintWriter w = new PrintWriter(out);//输出MAP信息
//500是图片长度,300是图片高度
String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session);
ChartUtilities.writeImageMap(w, "map0", info, false);

String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;

%>

<P ALIGN="CENTER">
<img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#map0">
</P>
</BODY>
</HTML>


  生成的图片如下


  在浏览器中点右键->查看源文件会发现有以下一段HTML代码:

<map id="map0" name="map0">
<area shape="poly" coords="247,61,250,61,250,123,250,123" title="博士 = 80" alt="" href="barview.jsp?category=博士&pieIndex=0"/>
<area shape="poly" coords="148,112,153,102,160,92,170,83,182,76,196,70,212,65,229,62,247,61,250,123,250,123" title="硕士 = 4,420" alt="" href="barview.jsp?category=硕士&pieIndex=0"/>
<area shape="poly" coords="324,167,311,173,297,179,282,182,266,185,250,186,234,185,217,183,202,179,188,173,175,167,
  165,159,157,151,151,142,147,132,146,122,148,112,250,123,250,123" title="本科 = 8,280" alt=""
 href="barview.jsp?category=本科&pieIndex=0"/>
<area shape="poly" coords="307,72,324,80,338,91,347,103,352,117,352,131,347,144,338,156,324,167,250,123,250,123" title="大专 = 5,700" alt="" href="barview.jsp?category=大专&pieIndex=0"/>
<area shape="poly" coords="261,62,285,65,307,72,250,123,250,123" title="高中
 = 1,530" alt="" href="barview.jsp?category=高中&pieIndex=0"/>
<area shape="poly" coords="250,61,261,62,250,123,250,123" title="高中以下 = 370" alt="" href="barview.jsp?category=高中以下&pieIndex=0"/>
</map>



  这就是MAP信息,我们在IMG标签中加入usemap="#map0"就可以为饼图的每一部分加入链接。

  <五>柱状图页面代码:(barview.jsp)

<HTML>
<HEAD>
<META http-equiv=Content-Type content="text/html; charset=GBK">
<TITLE>nacl_zhuang@hotmail.com</TITLE>
</HEAD>

<body>

<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="org.jfree.chart.ChartFactory,
org.jfree.chart.JFreeChart,
org.jfree.chart.plot.PlotOrientation,
org.jfree.chart.servlet.ServletUtilities,
org.jfree.data.category.*"%>
<%
CategoryDataset dataset;
String category=request.getParameter("category");
category= new String(category.getBytes("ISO8859_1"), "GBK");
if(category.equals("本科")||category.equals("高中")||category.equals("大专"))
{
 dataset=getDataSet();
}
else if(category.equals("硕士")||category.equals("博士"))
{
 dataset=getDataSet2();
}else
{
 dataset=getDataSet3();
}
String title=category+"程序员在各城市薪金情况统计";
JFreeChart chart = ChartFactory.createBarChart3D(title,
"城市",
"薪金",
dataset,
PlotOrientation.VERTICAL,
true,
false,
false);

String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session);
String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
%>
<P ALIGN="CENTER">
<img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= filename %>">
</P>
<%!
private static CategoryDataset getDataSet() {
 DefaultCategoryDataset dataset = new DefaultCategoryDataset();
 dataset.addValue(2000, "北京", "VB");
 dataset.addValue(1800, "上海", "VB");
 dataset.addValue(2200, "广州", "VB");
 dataset.addValue(3200, "北京", "JAVA");
 dataset.addValue(3500, "上海", "JAVA");
 dataset.addValue(3600, "广州", "JAVA");
 dataset.addValue(3300, "北京", "DOT NET");
 dataset.addValue(3400, "上海", "DOT NET");
 dataset.addValue(3700, "广州", "DOT NET");
 dataset.addValue(2500, "北京", "DELPHI");
 dataset.addValue(2800, "上海", "DELPHI");
 dataset.addValue(3200, "广州", "DELPHI");
 dataset.addValue(5000, "北京", "VC");
 dataset.addValue(3500, "上海", "VC");
 dataset.addValue(4600, "广州", "VC");
 return dataset;
}
private static CategoryDataset getDataSet2() {
 DefaultCategoryDataset dataset = new DefaultCategoryDataset();
 dataset.addValue(2000, "上海", "VB");
 dataset.addValue(3000, "北京", "JAVA");
 dataset.addValue(3330, "上海", "JAVA");
 dataset.addValue(3500, "广州", "JAVA");
 dataset.addValue(3500, "北京", "DOT NET");
 dataset.addValue(4000, "上海", "DOT NET");
 dataset.addValue(4800, "广州", "DOT NET");
 dataset.addValue(2600, "北京", "DELPHI");
 dataset.addValue(2200, "上海", "DELPHI");
 dataset.addValue(4000, "北京", "VC");
 dataset.addValue(4000, "上海", "VC");
 dataset.addValue(4200, "广州", "VC");
 return dataset;
}
private static CategoryDataset getDataSet3() {
 DefaultCategoryDataset dataset = new DefaultCategoryDataset();
 dataset.addValue(2100, "北京", "VB");
 dataset.addValue(2200, "上海", "VB");
 dataset.addValue(2100, "广州", "VB");
 dataset.addValue(3000, "北京", "JAVA");
 dataset.addValue(3200, "上海", "JAVA");
 dataset.addValue(3600, "广州", "JAVA");
 dataset.addValue(4100, "北京", "DOT NET");
 dataset.addValue(4200, "上海", "DOT NET");
 dataset.addValue(4160, "广州", "DOT NET");
 dataset.addValue(2400, "北京", "DELPHI");
 dataset.addValue(2600, "上海", "DELPHI");
 dataset.addValue(2500, "广州", "DELPHI");
 dataset.addValue(5400, "北京", "VC");
 dataset.addValue(5000, "上海", "VC");
 dataset.addValue(5500, "广州", "VC");
 return dataset;
}
%>
</body>
</html>


  生成图片如下:

分享到:
评论

相关推荐

    JSP使用JFreeChart生成各种图表并生成PDF文档

    在实际应用中,你可能需要根据用户请求动态生成图表和PDF,这可能涉及到数据库查询、业务逻辑处理等步骤。同时,要注意性能优化,避免一次性加载大量数据或创建过多图表导致内存压力。 总结,JSP结合JFreeChart和...

    JFreeChart图表生成代码

    这个资源包包含了使用JFreeChart生成图表的代码示例,以及作者的整理笔记,旨在帮助开发者更好地理解和应用JFreeChart。 首先,JFreeChart的核心功能是生成各种类型的图表,如: 1. **饼形图(Pie Chart)**:饼形...

    JSP利用JFreeChart生成折线图

    本教程将详细介绍如何在JSP中利用JFreeChart库来生成折线图。 首先,要使用JFreeChart,你需要在项目中引入相关的依赖。"标签"中提到的JFreeChart是这个过程的关键,它提供了丰富的API来创建图表。通常,你需要下载...

    JFreeChart与JSP动态图表

    2. **Servlet处理**:由于JSP页面通常不直接处理复杂的逻辑,所以实际生成图表的代码通常放在一个Servlet中,这个Servlet接收请求,生成图表,然后以流的形式返回给客户端。 3. **响应头设置**:为了使浏览器能够...

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

    7. **与其他技术集成**:作为Java库,JFreeChart 可以方便地与Spring、Struts等框架集成,也可以在Servlet或JSP中使用,生成图表动态网页。你可以在Web应用中调用这些服务方法,生成图表并以图像格式返回给客户端。 ...

    jfreechart各类曲线图JSP代码

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

    jFreeChart示例代码,封装成jsp标签

    在本案例中,`jFreeChart` 封装的 JSP 标签库允许前端设计人员只需在 JSP 页面中插入特定的标签,就可以生成图表,无需编写复杂的 Java 代码。 **2. 数据源与图表类型** JFreeChart 标签的使用需要指定数据源,这...

    JFreeChart生成图片并显示

    这篇博文将深入探讨如何使用JFreeChart生成图片并将其在Web应用中显示。 首先,我们需要了解JFreeChart的基本概念。JFreeChart是一个用Java编写的库,它允许开发者创建各种类型的2D图表,包括折线图、柱状图、饼图...

    使用 jfreechart 生成 曲线、柱状图、饼状图、分布图 展示到JSP

    这些代码可能分为Java后端部分(生成图表并返回图像流)和JSP前端部分(显示图表)。在实际使用时,开发者需要根据自己的数据和需求调整代码。 总之,`JFreeChart`是一个强大的Java图表库,能够方便地在JSP中生成...

    利用JFreeChart实现Java中饼状图、柱状图等图表并在Jsp中显示

    在这里,Servlet可能负责处理数据并使用JFreeChart生成图表,然后将图表传递给JSP页面展示。 4. **myEclipse和Tomcat**:myEclipse作为开发工具,提供了一整套开发、调试和部署Java Web应用的环境。Tomcat作为...

    在Struts中用JFreeChart生成图表

    ### 在Struts中使用JFreeChart生成图表 #### 一、引言 随着Web应用程序功能需求的日益增加,用户不仅需要获取数据,还希望能够直观地理解这些数据所代表的意义。图表作为一种直观的数据可视化手段,在现代Web应用...

    JFreeChart与JSP动态图表.rar

    结合JFreeChart,开发者可以在用户每次请求时动态生成图表,这在数据更新频繁或者需要根据用户输入生成不同图表的场景下特别有用。在JSP中使用JFreeChart通常涉及以下几个步骤: 1. 引入JFreeChart库:在JSP页面或...

    jfreechart源代码在swt和jsp页面

    1. **创建图表**:在 Servlet 或其他服务器端 Java 类中,使用 JFreeChart 生成图表。 2. **转换为流**:将图表转换为 `BufferedImage`,然后将其写入 `OutputStream`。 3. **发送响应**:设置 HTTP 响应的 MIME ...

    JFreeChart在JSP中的应用实例

    由于其良好的可定制性和兼容性,JFreeChart被广泛应用于Web应用程序中,特别是与JSP(Java Server Pages)结合使用时,可以轻松地生成动态图表。 #### 二、JFreeChart的下载与部署 ##### 下载 JFreeChart的下载...

    在Java Web中使用JFreechart创建图表信息(主要用于统计方面)

    例如,我们可以使用JDBC从数据库读取数据,填充到`Dataset`中,再用JFreeChart生成图表。 此外,JFreeChart还支持动态更新图表,这对于实时监控或数据分析应用特别有用。通过JavaScript和Ajax,客户端可以定期请求...

    JFreeChart图表绘制源码

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

    JFreeChart -- web图表生成源码

    传统的一些以软件包形式发布应用程序例如报表系统等都在逐渐搬到因特网上。但是这两者之间有着天壤之别,虽然对于数据获取、业务处理等方面...因此我们下面将介绍一个JAVA的图表引擎JFreeChart用来产生基于WEB的图表。

    JFreeChart+JSP实现统计图展示

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

Global site tag (gtag.js) - Google Analytics