jfreechart制作统计图表

本文介绍如何使用Struts2框架结合JFreeChart库创建动态统计图表。通过配置struts.xml文件并实现VoteAction类来生成柱状图,展示了如何定制图表样式及从用户输入中收集数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Struts2结合JFreeChart制作统计图表(2009-03-07 18:23:47)标签:杂谈 分类:J2EE

项目结构示意图:
在下面的图片附件中的第二张


struts.properties文件内容:

struts.locale=zh_CN
struts.i18n.encoding=GBK

struts.xml文件内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file="struts-default.xml" />
<package name="struts2" extends="jfreechart-default">
<action name="vote" class="com.luo.action.VoteAction">
<result name="success" type="chart">
<param name="height">600</param>
<param name="width">800</param>
</result>
</action>
</package>
</struts>

VoteAction.java文件内容:

package com.luo.action;

import java.awt.Font;
import java.util.List;
import java.util.Map;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class VoteAction extends ActionSupport {
private List<String> interest;
private JFreeChart chart;
public JFreeChart getChart() {
return chart;
}
public void setChart() {
StandardChartTheme standardChartTheme = new StandardChartTheme("name");
standardChartTheme.setLargeFont(new Font("楷体", Font.BOLD, 12));// 可以改变轴向的字体
standardChartTheme.setRegularFont(new Font("宋体", Font.BOLD, 12));// 可以改变图例的字体
standardChartTheme.setExtraLargeFont(new Font("隶书", Font.BOLD, 12));// 可以改变图标的标题字体
ChartFactory.setChartTheme(standardChartTheme);// 设置主题
JFreeChart chart1 = ChartFactory.createBarChart("投票系统", "投票类别", "投票结果",
this.createDataset(), PlotOrientation.VERTICAL, false, false,
false);
CategoryPlot plot = (CategoryPlot) chart1.getPlot();
CategoryAxis categoryAxis = plot.getDomainAxis(); // 取得横轴
categoryAxis.setLabelFont(new Font("宋体", Font.ITALIC, 22));
categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();// 取得纵轴
numberAxis.setLabelFont(new Font("宋体", Font.ITALIC, 22));
this.chart = chart1;
}
public List<String> getInterest() {
return interest;
}
public void setInterest(List<String> interest) {
this.interest = interest;
}
@Override
public String execute() throws Exception {
setChart();
return SUCCESS;
}
@SuppressWarnings("unchecked")
public void increamentResult(List<String> voteList) {
ActionContext context = ActionContext.getContext();
Map map = context.getApplication();
for (String vote : voteList) {
if (null == map.get(vote)) {
map.put(vote, 1);
} else {
map.put(vote, ((Integer) map.get(vote)).intValue() + 1);
}
}
}
public CategoryDataset createDataset() {
DefaultCategoryDataset category = new DefaultCategoryDataset();
ActionContext context = ActionContext.getContext();
Map map = context.getApplication();
this.increamentResult(this.interest);
category.setValue((Integer) map.get("football"), "", "足球");
category.setValue((Integer) map.get("featherball"), "", "羽毛球");
category.setValue((Integer) map.get("pingpong"), "", "乒乓球");
category.setValue((Integer) map.get("basketball"), "", "篮球");
return category;
}
}

web.xml文件内容:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>


<welcome-file-list>
<welcome-file>vote.jsp</welcome-file>
</welcome-file-list>
</web-app>

vote.jsp文件内容:

<%@ page language="java" pageEncoding="GBK"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>

<body>
<s:form action="vote">
<s:checkbox name="interest" fieldValue="football" label="足球"
labelposition="left"></s:checkbox>
<s:checkbox name="interest" fieldValue="basketball" label="篮球"
labelposition="left"></s:checkbox>
<s:checkbox name="interest" fieldValue="featherball" label="羽毛球"
labelposition="left"></s:checkbox>
<s:checkbox name="interest" fieldValue="pingpong" label="乒乓球"
labelposition="left"></s:checkbox>
<s:submit label="submit"></s:submit>
</s:form>
</body>
</html>
生成图表:
在下面的图片附件中的第三张


以上程序调试通过!
《Tecplot与MIKE结合教程》是一份详细介绍如何将Tecplot与MIKE软件进行协同工作的学习资料。这份教程旨在帮助用户理解并掌握这两款强大的科学计算与数据可视化工具的整合应用,从而提高在流体动力学、环境工程、海洋科学等领域的模拟分析效率。 Tecplot是一款广泛应用于科研和工程领域的数据可视化和分析软件,它能够处理大量数据,快速生成高质量的2D和3D图形,便于用户理解和解释复杂的数值模拟结果。其强大的后处理能力,如等值线绘制、颜色梯度图、矢量场显示等功能,使得数据的呈现更加直观。 MIKE(原名DHI软件)是由丹麦水力研究所开发的一系列专业仿真软件,主要用于水资源管理、环境流动、海岸工程等领域。MIKE软件家族包括MIKE 11(河流模拟)、MIKE 21(海洋模型)、MIKE 3(三维流体动力学模型)等,可以解决从河流、湖泊到海洋的各类水动力问题。 当Tecplot与MIKE结合使用时,Tecplot作为后处理器,可以接收MIKE软件产生的计算结果,进行更深入的数据解析和可视化。通过这种方式,用户不仅可以查看MIKE模拟出的流场、浓度分布等数据,还能进行多变量分析、动制作,以及生成专业报告所需的图表,极大地提高了数据分析的效率和质量。 教程中可能会涵盖以下内容: 1. **数据导入**:讲解如何从MIKE软件导出适合Tecplot处理的文件格式,如ASCII或二进制文件。 2. **Tecplot界面操作**:介绍Tecplot的基本操作,如数据加载、变量选择、区域定义等。 3. **数据可视化**:教学如何使用Tecplot创建等值线图、颜色梯度图、矢量图等,以及调整色彩映射、透明度等参数,以清晰地展示MIKE的模拟结果。 4. **动制作**:说明如何通过Tecplot制作时间序列动,动态展示流动过程。 5. **高级分析**:可能涉及统计分析、插值运算、剖面图绘制等高级功能,帮助用户深入理解模拟数据。 6. **定制化和脚本编程**:介绍如何利用Tecplot的内置脚本语言(如TecScript或Python)自动化处理MIKE数据,进行批量分析或自定义功能的实现。 7. **案例研究**:提供实际案例,演示Tecplot与MIKE结合的具体应用,如河流污染扩散分析、海岸线变化模拟等。 通过学习这份教程,用户将能够熟练地将Tecplot与MIKE结合使用,提升在复杂水动力问题上的建模和分析能力,为科学研究和工程决策提供有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值