`
wutheringsea
  • 浏览: 263366 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

[转] jfreechart创建包含Map对象的统计图

阅读更多

记录,备用

一、HTML中map对象和area元素:

在Web开发中,我们使用可以jfreechart引擎在server端绘制图表,并在浏览器端呈现给用户。但是,有时可能需要以下一些操作,比如在柱状图中光标悬停在某个柱体上得到它的取值,点击饼图中某个扇形获取更详细信 息等等,为此就要求该图形具有交互操作 的功能。在HTML规范中为了让<img>具有交互性,需要为其定义一个Map对象。先来看一个具体的实例:
<p><img src="solar.gif" width="504" height="126" alt="太阳系" usemap="#myMap">
<map name="myMap">
<area shape="rect" coords="0,0,82,126" title="sun" href="sun.gif">
<area shape="circle" coords="90,58,3" title="mercury" href="mercury.gif">
<area shape="circle" coords="124,58,8" title="venus" href="venus.gif">
<area shape="circle" coords="162,58,10" title="earth" href="earth.gif">
<area shape="circle" coords="203,58,8" title="mars" href="mars.gif">
<area shape="poly" coords="221,34,238,37,257,32,278,44,284,60,281,75,288,91,267,87,253,89,
237,81,229,64,228,54" title="jupitor" href="jupitor.gif">
<area shape="poly" coords="288,19,316,39,330,37,348,47,351,66,349,74,367,105,337,85,324,85,
307,77,303,60,307,50" title="saturn" href="saturn.gif">
<area shape="poly" coords="405,39,408,50,411,57,410,71,404,78,393,80,383,86,381,75,376,69,
376,56,380,48,393,44" title="uranus" href="uranus.gif">
<area shape="poly" coords="445,38,434,49,431,53,427,62,430,72,435,77,445,92,456,77,463,72,
463,62,462,53,455,47" title="neptune" href="neptune.gif">
<area shape="circle" coords="479,66,3" title="pluto" href="pluto.gif">
</map>




这个实例提供了一个太阳系的图像映射代码。该代码在 map 元素中使用 area 元素及其 coords 和 shape 属性创建了由图象映射指向单个行星图像的链接。shape取值有3种:rect 或 rectangle 表示矩形区域、circ 或 circle 表示圆形区域、poly 或 polygon表示多边形区域。coords取值格式取决于 shape 属性的值,具体如下:
shape = circ/circle coords = "x1,y1,r"
//以(x1,y2)为圆心、r为半径的圆形区域

shape= poly/polygon coords = "x1,y1,x2,y2...xn,yn"
//以每个(x,y)为一个顶点、依次构成的多边形区域

shape= rect/rectangle coords= "x1,y1,x2,y2"
//以(x1,y1)为左上角顶点、(x2,y2)为右下角顶点所构成的矩形区域
你也许要说,看了coords就要晕了,我怎么可能写出这个Map啊!放心吧,这种脏活累活会由任劳任怨的jfreechart搞定。具体来说,ChartUtilities类中的writeImageMap方法会帮我们生成Map对象。

二、jfreechart创建包含Map对象的统计图

当我们在sevlet/jsp中使用jfreechart的时候,总会用到一个类,他就是org.jfree.chart.ChartUtilities。这个类包含了常用的公用方法:从chart对象来生成图像(支持JPEG和PNG两种格式)、生成图像的Map对象。这个类的所有方法都是static的。

通过第一部分的介绍,Map是究竟什么呢?简而言之,Map定义了一个图像中不同区域的信息,包括了位置、提示和链接。而后两项信息在创建一个chart对象时最后两个参数相关联:
// 获取JFreeChart对象
JFreeChart chart = ChartFactory.createMultiplePieChart (

chartTitle, // 图表标题
dataset, // 数据集
TableOrder.BY_COLUMN, // 指定被提取数据的顺序
false, // 是否包含图例
true, // 是否包含提示工具
true // 是否包含url
);
为了生成Map对象还需要另外一个对象org.jfree.chart.ChartRenderingInfo。因为jfreechart没有直接的方法从一个chart对象直接生成Map,而是需要ChartRenderingInfo对象来过渡。具体步骤为:

1、创建一个ChartRenderingInfo对象。
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());

2、调用ServletUtilities类的saveChartAsJPEG方法、ChartRenderingInfo对象作为参数传入。
// 调用该方法结束后将在临时目录产生一个名为fileName 的图像文件
// 该文件与HttpSession相关联,被一个ChartDeleter实例注册
// 也就是说当session结束后,会由ChartDeleter来删除这个临时图像文件
String fileName = ServletUtilities.saveChartAsJPEG(chart, width, height, info, session);

3、作为参数被传入的ChartRenderingInfo对象已经填充好Map数据,调用writeImageMap方法。
// 从ChartRenderingInfo对象中读取信息。写HTML中的<map>元素
ChartUtilities.writeImageMap(new PrintWriter(out), fileName, info);

三、效果图以及源代码:

<%@ page language="java" contentType="text/html;charset=GB2312"
import="java.text.*"
import="java.awt.*"
import="org.jfree.chart.*"
import="org.jfree.chart.servlet.*"
import="org.jfree.chart.plot.*"
import="org.jfree.chart.labels.StandardPieItemLabelGenerator"
import="org.jfree.chart.entity.*"
import="org.jfree.data.category.*"
import="org.jfree.util.*"
import="java.io.*"
%>
<%
String bookType[] = {"社科类", "文学类", "体育类", "少儿类"};
String week[] = {"第1周", "第2周", "第3周", "第4周"};

String category = request.getParameter("category") == null ?
"" : request.getParameter("category");
category = new String(category.getBytes("8859_1"),"gb2312");

String pieIndexStr = request.getParameter("pieIndex") == null ?
"-1" : request.getParameter("pieIndex");
int pieIndex = Integer.parseInt(pieIndexStr);
int cateIndex = -1;

for (int i = 0; i < bookType.length; i++) {
if (bookType[i].equals(category))
cateIndex = i;
}

String title = "各周图书销量";
String chartTitle = request.getParameter("category") == null ?
title : title + "——" + category + week[pieIndex];

// 创建数据集
DefaultCategoryDataset dataset = new DefaultCategoryDataset();

// 构建数据
int bookSales;
for (int i = 0; i < bookType.length; i++) {
for (int j =0 ; j < week.length; j++) {
bookSales = 50 + i * 10 + j * 100;
dataset.addValue(bookSales, bookType[i], week[j]);
}
}

// 获取JFreeChart对象
JFreeChart chart = ChartFactory.createMultiplePieChart (

chartTitle, // 图表标题
dataset, // 数据集
TableOrder.BY_COLUMN, // 指定被提取数据的顺序
false, // 是否包含图例
true, // 是否包含提示工具
true // 是否包含url
);


// 创建图像
int width = 800, height = 600;

// 获取PiePlot对象
MultiplePiePlot multiPlot = (MultiplePiePlot) chart.getPlot();
JFreeChart obj = multiPlot.getPieChart();
PiePlot plot = (PiePlot) obj.getPlot();

plot.setURLGenerator(new org.jfree.chart.urls.StandardPieURLGenerator("hot.jsp"));

// 设置标签格式
plot.setLabelGenerator(new StandardPieItemLabelGenerator("{0}:{1}({2})",
NumberFormat.getNumberInstance(),
new DecimalFormat("0.00%")));

// 分离圆弧
if (cateIndex != -1)
plot.setExplodePercent(cateIndex, 0.2);


// 设置饼图标签的绘制字体
plot.setLabelFont(new Font("黑体", Font.PLAIN, 12));

ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());

// 设置图片生成格式
String fileName = ServletUtilities.saveChartAsJPEG(chart,
width, height, info, session);

ChartUtilities.writeImageMap(new PrintWriter(out), fileName, info);

// 设置图片生成路径
String graphURL = request.getContextPath() +
"/servlet/org.jfree.chart.servlet.DisplayChart?filename=" + fileName;
%>
<p align="center">
<img src="<%= graphURL %>" usemap="#<%= fileName %>" />
</p>

 

来源:http://blog.csdn.net/vearn/archive/2006/12/22/1454200.aspx

分享到:
评论

相关推荐

    Freemarker导出word示例,包括jfreechart图表

    在描述中提到,我们还会用到JFreeChart库,这是一个用于生成各种图表的Java库,支持多种图表类型,包括柱状图和饼图。JFreeChart的强大之处在于它的灵活性,可以定制图表的颜色、样式、数据标签等各个方面。在本示例...

    jfreechart-1.0.10.jar 压缩包 刘尧涛

    这个库在Java开发社区中被广泛使用,因为它能够帮助开发者轻松地在应用程序中创建各种图表,包括折线图、柱状图、饼图、散点图、甘特图以及更多复杂的统计图表。JFreeChart 提供了丰富的定制选项,使得图表可以按照...

    JSP统计图实例

    在JSP中创建统计图通常涉及到以下几个关键步骤: 1. 数据收集与处理:在实现统计图前,我们需要获取并处理相关数据。这可能来自数据库查询、文件读取或者API调用。确保数据准确无误是构建可靠图表的基础。 2. 图表...

    JFreeChart-1.0.13

    通过修改源码,你可以创建独特的图表样式,满足特定的项目需求,例如创建具有企业特色的报表或统计图。 2. **写入本地文件夹** 这一特性使得 JFreeChart 可以将生成的图表保存为本地图像文件,如 PNG、JPEG 或 PDF...

    java源码:Java图表 JFreeChart.zip

    这个压缩包"java源码:Java图表 JFreeChart.zip"包含了JFreeChart的1.0.14版本源代码,允许开发者深入理解其内部工作原理并进行定制化开发。 JFreeChart库提供了丰富的图表类型,包括: 1. 折线图(Line Chart):...

    JAVA Web程序设计-3期(KC006) 13-2应用JFreeChart组件生成饼形图的操作步骤.doc

    - 创建`JFreeChart`对象并设置图表标题、背景颜色等属性。 - 使用`ServletUtilities.saveChartAsJPEG`方法将图表保存为JPEG图像。 - 最后,调用`ChartUtilities.writeImageMap`生成图像地图。 #### 实践指导 1. ...

    java JFreeChart教程

    它提供了丰富的图表类型,包括饼图、柱状图、折线图等,几乎涵盖了所有常见的统计图表需求。JFreeChart由JFree组织维护,并在SourceForge.net上发布,其主要组成部分包括: 1. **JFreeReport**:用于报表生成。 2. ...

    JAVA实现的单词统计、绘制图表程序

    Java提供了多种库用于数据可视化,例如JFreeChart,它能够创建各种类型的图表,包括柱状图、饼图等,非常适合用于显示单词频率。使用JFreeChart,你需要创建一个`CategoryDataset`对象来存储数据,再创建对应的`...

    java 从hadoop hdfs读取文件 进行groupby并显示为条形图

    对于条形图,可以利用`JFreeChart`库,它支持创建各种类型的图表,包括柱状图。 8. **JFreeChart使用**:首先,需要创建`CategoryDataset`对象,将GROUP BY的结果填充到其中。然后,使用`CategoryPlot`和`...

    基于itext7+freemarker模板导出pdf

    定义一个Java对象或Map来存储要展示的数据。例如: ```java Map, Object&gt; data = new HashMap(); data.put("title", "报告标题"); data.put("content", "这是报告内容..."); // 添加更多数据... ``` 步骤四:生成...

    strut2+jfreechar生成图表

    这个例子展示了如何创建柱状图,但JFreeChart支持多种图表类型,可以根据需求灵活选择。同时,还可以通过Struts2的拦截器和其他功能来实现更复杂的交互,比如根据请求参数动态生成图表,或者添加图表的下载功能。 ...

    geoserver-2.0.3-charts-plugin.zip

    4. **gt-charts-2.6.6.jar**:GeoTools是开源的Java GIS库,而gt-charts则是GeoTools的一个模块,专门用于图表和统计图的生成。在GeoServer中,gt-charts与jFreeChart协同工作,提供了地理空间数据到图表的转换接口...

    JAVA工程师面试题

    12. 生成统计图表可使用JFreeChart库,提供柱状图、饼图、曲线图等。 13. Jsp中的errorPage用于指定错误处理页面,全局错误页面在web.xml中配置,针对特定错误代码可在JSP中配置。 14. 工厂模式用于创建对象,例如...

    FusionCharts学习资料及源码

    7. **地图(Map Chart)**:用于地理数据的可视化,可展示区域或国家的统计信息。 **使用FusionCharts的步骤** 1. **引入库文件**:首先在HTML文件中引入FusionCharts的JavaScript库和CSS文件。 2. **准备数据**:...

    JAVA学生考试成绩分析程序

    例如,JTable可以用来显示成绩列表,JOptionPane用于用户交互,而JFreeChart或JavaFX的Charts模块则用于绘制成绩分布图、柱状图或饼图。 6. **事件监听与处理**:在GUI中,用户与控件交互时会产生事件,程序需要...

    在JSP中导出pdf和excel.pdf

    这里,dataSource代表之前配置的数据源,parameters包含报表所需的任何参数,而response是Servlet的HttpServletResponse对象,用于将生成的文件发送给客户端。 总之,在JSP环境中导出PDF和Excel文件涉及到多个库的...

    ireport报表所需jar包

    - jfreechart.jar:JFreeChart库,用于生成各种复杂的统计图表。 - commons-beanutils.jar、commons-collections.jar、commons-digester.jar、commons-logging.jar:Apache Commons项目的一系列工具库,为...

    xuejiguanli.rar_学籍管理系统 JAVA

    开发者可以创建一个Student类,包含姓名、性别、出生日期、专业等属性,通过数据库操作实现信息的增删改查。 2. **成绩管理**:系统应能记录和管理学生的考试成绩,支持批量导入、导出,以及按照课程、学期等多种...

Global site tag (gtag.js) - Google Analytics