基于web的jfreechart的使用
这个模块的主要步骤就是:
前台通过struts调用后台,通过JFreeChart产生图片格式的图表,存储在某个位置,然后前台jsp再去调用图片。
来开工。
JFreeChart的简介大家请百度。
首先需要两个包,jcommon-1.0.16.jar和jfreechart-1.0.13.jar。
jfreechart(下面就简称jfc),有可能会出现中午乱码问题,我建议大家就找上面那两个包,至少不会出那些需要换包的问题。
先看看效果
生成的图片:
前台的显示效果:
后台的方法
public String statistic() {
//.....
//diagramType就是前台的那个下拉框
//可以是饼状图也可以是柱状图
if (diagramType.equals("barChart"))
getBarChart();
else
getPieChart();
//getExcel(countArray);
return SUCCESS;
}
/**
* 生成柱状图
*/
public void getBarChart() {
CategoryDataset dataset = getDataSet();// 获取数据结果集
JFreeChart chart = ChartFactory.createStackedBarChart3D("不同危险等级病人数分布", // 标题
"危险等级",// x轴显示
"病人数量(单位:位)", // y轴显示
dataset, // 数据源
PlotOrientation.VERTICAL, // 图表方向:水平,垂直
true, // 是否显示图例(对于简单的柱状图必须是false)
false,// 是否生成工具
false);// 是否生成URL链接
CategoryPlot plot = chart.getCategoryPlot();
CategoryAxis axis = plot.getDomainAxis(); // 获取X轴
ValueAxis numberAxis = plot.getRangeAxis();// 获取y轴
axis.setLowerMargin(0.06);// 设置距离图片左端距离此时为6%
axis.setUpperMargin(0.06); // 设置距离图片右端此时为6%
axis.setCategoryLabelPositionOffset(10);// 图表横轴与标签的距离(10像素)
axis.setCategoryMargin(0.2);// 横轴标签之间的距离20%
chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 12));// 设置底部中文乱码
axis.setTickLabelFont(new Font("黑体", Font.BOLD, 12));// 设置X轴坐标上的文字
axis.setLabelFont(new Font("黑体", Font.BOLD, 14));// 设置X轴的标题文字
numberAxis.setTickLabelFont(new Font("黑体", Font.BOLD, 12));// 设置y轴坐标上的文字
numberAxis.setLabelFont(new Font("黑体", Font.BOLD, 14));// 设置Y轴的标题文字
chart.getTitle().setFont(new Font("黑体", Font.BOLD, 18));// 设置标题文字
NumberAxis numberAxis1 = (NumberAxis)chart.getCategoryPlot().getRangeAxis();
numberAxis1.setAutoTickUnitSelection(false);
numberAxis1.setTickUnit(new NumberTickUnit(30D));//1为一个间隔单位
BarRenderer3D customBarRenderer = (BarRenderer3D) plot.getRenderer();
customBarRenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());//显示每个柱的数值
customBarRenderer.setBaseItemLabelsVisible(true); //柱子上数值可见
Date date = new Date();// 获取当前时间
chartTimeTag = Long.toString(date.getTime());// 获取当前时间的时间戳
String path = ServletActionContext.getServletContext().getRealPath("/")
+ "resources/chart/" + chartTimeTag + ".png";// 图片的存储路径
// 输出图片到文件
FileOutputStream fos_png = null;
try {
fos_png = new FileOutputStream(path);
ChartUtilities.writeChartAsPNG(fos_png, chart, 900, 500, null);// 存储为png图片,宽度为900,高为500
fos_png.close();
} catch (IOException e) {
e.printStackTrace();
logger.error(e.toString());
}
}
/**
* 得到生成柱状图的数据结果集,将方法tongJi()所得到的结果集中的数据依次添加到dataset中
*
* @return dataset 返回柱状图所需要的数据结果集
*/
public CategoryDataset getDataSet() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
for (int i = 0; i < hosDegreeDataList.size(); i++) {
//hosDegreeDataList里面存放的就是数据
//hosDegreeDataList是一个list 每个element都是一组数据
//大家对比一下图片中的ss与mm 就知道addValue的三个参数的作用了
dataset.addValue(Integer.parseInt(hosDegreeDataList.get(i).get(2)
.toString()), hosDegreeDataList.get(i).get(0).toString()+"mm",
hosDegreeDataList.get(i).get(0).toString()+"ss"); //加上ss与mm 你就知道这两个参数的区别了
}
return dataset;
}
/**
* 生成饼状图
*/
public void getPieChart() {
System.out.println("create chart start!!!!!!!!!");
PieDataset dataset = getPieDataSet();// 获取数据结果集
JFreeChart chart = ChartFactory.createPieChart3D("不同危险等级病人数分布",// 图表标题
dataset,// 数据源
true,// 是否显示图例
true, true);// 是否生成工具,是否生成URL链接
PiePlot3D plot = (PiePlot3D) chart.getPlot();
// 图片中显示百分比:默认方式
plot.setLabelGenerator(new StandardPieSectionLabelGenerator(
StandardPieToolTipGenerator.DEFAULT_TOOLTIP_FORMAT));
// 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值,
// {2} 表示所占比例 ,小数点后两位
plot.setLabelGenerator(new StandardPieSectionLabelGenerator(
"{0}={1}({2})", NumberFormat.getNumberInstance(),
new DecimalFormat("0.00%")));
// 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例
plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}"));
// 指定图片的透明度(0.0-1.0)
plot.setForegroundAlpha(1.0f);
// 指定显示的饼图上圆形(true)还椭圆形(false)
plot.setCircular(true);
// 设置图上分类标签label的字体,解决中文乱码
plot.setLabelFont(new Font("黑体", Font.PLAIN, 12));
// 设置图上分类标签label的最大宽度,相对与plot的百分比
plot.setMaximumLabelWidth(0.2);
// 设置3D饼图的Z轴高度(0.0~1.0)
plot.setDepthFactor(0.07);
// 设置起始角度,默认值为90,当为0时,起始值在3点钟方向
plot.setStartAngle(45);
// 设置图标题的字体,解决中文乱码
TextTitle textTitle = chart.getTitle();
textTitle.setFont(new Font("黑体", Font.PLAIN, 20));
// 设置背景色为白色
chart.setBackgroundPaint(Color.white);
// 设置Legend部分字体,解决中文乱码
chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));
Date date = new Date();
chartTimeTag = Long.toString(date.getTime());// 获取当前的时间戳
String path = ServletActionContext.getServletContext().getRealPath("/")
+ "resources/chart/" + chartTimeTag + ".png";// 图片的存储路径
// 输出图片到文件
//+"resources/chart/abc.png";
System.out.println(path);
FileOutputStream fos_png = null;
try {
fos_png = new FileOutputStream(path);
ChartUtilities.writeChartAsPNG(fos_png, chart, 900, 500, null);
fos_png.close();
} catch (IOException e) {
e.printStackTrace();
logger.error(e.toString());
}
}
/**
* 得到生成饼状图的数据结果集:将方法tongJi()所得到的结果集中的数据依次添加到dataset中
*
* @return dataset 返回饼状图所需要的数据结果集
*/
public PieDataset getPieDataSet() {
DefaultPieDataset dataset = new DefaultPieDataset();
for (int i = 0; i < hosDegreeDataList.size(); i++) {
dataset.setValue(hosDegreeDataList.get(i).get(0).toString(), Double
.parseDouble(hosDegreeDataList.get(i).get(2).toString()));
}
return dataset;
}
返回的jsp页面部分代码如下:
<img src="../../../resources/chart/<s:property value = "chartTimeTag"/>.png"
/ width="500px">
<br>
<br>
<input type="button" class="btn_long" value="点击查看大图"
onclick="window.open('../../../resources/chart/<s:property value="chartTimeTag"/>.png')" />
基于web的jfreechart的使用的更多相关文章
- shellinabox基于web浏览器的终端模拟器
1. Shellinabox介绍 Shellinabox 是一个利用 Ajax 技术构建的基于 Web 浏览器的远程终端模拟器,也就是说安装了该软件之后,服务器端不需要开启 ssh服务,通过 Web ...
- Tridiv:基于 Web 的 CSS 编辑器,创建炫丽 3D 图形
Tridiv 是一个基于 Web 的编辑器,使用 CSS 创建 3D 形状.它提供了一个传统的四个面板的操作界面,给出了从每个平面的视图,以及一个预览窗格中示出的最终的效果.使用 Tridiv 可以创 ...
- Eclipse Che:下一代基于 Web 的 IDE
即使对于熟练的开发人员,想要去为一个项目贡献代码,正确的安装和配置一个集成开发环境.工作区 workspace和构建工具,都是一个十分艰难和浪费时间的任务.Codenvy 的CEO,Tyler Jew ...
- 基于web的IM软件通信原理分析
关于IM(InstantMessaging)即时通信类软件(如微信,QQ),大多数都是桌面应用程序或者native应用较为流行,而网上关于原生IM或桌面IM软件类的通信原理介绍也较多,此处不再赘述.而 ...
- Hya.io – 基于 Web 的数字音频工作站
Hya.io 是基于 Web 的音频应用程序,通过 Web MIDI ,音频合成器,音序以及大量的插件来支持硬件 MIDI .您可以添加插件到工作区,将其连接到路由音频,进行播放和实验. HYA 支持 ...
- 基于Web的企业网和互联网的信息和应用( 1194.22 )
基于Web的企业网和互联网的信息和应用( 1194.22 ) 原文更新日期: 2001年6月21日原文地址: http://www.access-board.gov/sec508/guide/1194 ...
- 基于web工作流开发
目前在研发基于web工作流的开发 什么是工作流? 工作流简言之就是: 1.反应业务流程的计算机化的模型. 2.一类能够完全或者部分自动执行的经营过程:(为了提高效率,实现自动化). 3.任务.活动及活 ...
- 基于Web的数据推送技术(转)
基于Web的数据推送技术 对于实时性数据显示要求比较高的系统,比如竞价,股票行情,实时聊天等,我们的解决方案有以下几种.1. HTTP请求发送模式,一般可以基于ajax的请求,比如每3秒一次访问下服务 ...
- 使用 XMPP 构建一个基于 web 的通知工具——转
Inserting of file(使用 XMPP 构建一个基于 web 的通知工具.docx) failed. Please try again. http://www.ibm.com/develo ...
随机推荐
- MySQL系列教程(五)
MyCAT MyCat是基于阿里开源的Cobar产品而研发,Cobar的稳定性.可靠性.优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远 ...
- Android Multimedia框架总结(二十五)MediaProjection实现手机截屏(无须root)
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/53966818 前言:一年半多以前 ...
- SQL Server 虚拟化(1)——虚拟化简介
本文属于SQL Server虚拟化系列 前言: 现代系统中,虚拟化越来越普遍,如果缺乏对虚拟化工作原理的理解,那么DBA在解决性能问题比如降低资源争用.提高备份还原速度等操作时就会出现盲点.所以基于本 ...
- Linux 性能监测:CPU
CPU 的占用主要取决于什么样的资源正在 CPU 上面运行,比如拷贝一个文件通常占用较少 CPU,因为大部分工作是由 DMA(Direct Memory Access)完成,只是在完成拷贝以后给一个中 ...
- Appium移动自动化框架初探
作者:cryanimal QQ:164166060 本文简要介绍了appnium自动化框架的架构.加载流程.支持语言.相关配置,以及元素定位工具等. 官方网站: http://appium.io Ap ...
- git中status指令总是提示内容被修改的解决
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 最近在用git提交项目修改时发现一个问题,就是多次 git a ...
- 在Gazebo中使用DEM構建起伏地形環境
所需資料下載地址: 1. https://bitbucket.org/osrf/gazebo_tutorials/raw/default/dem/files/ 数字高程模型(致謝谷歌翻譯)概述数字高程 ...
- 剑指Offer——分治算法
剑指Offer--分治算法 基本概念 在计算机科学中,分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更 ...
- Spark技术内幕:Master基于ZooKeeper的High Availability(HA)源码实现
如果Spark的部署方式选择Standalone,一个采用Master/Slaves的典型架构,那么Master是有SPOF(单点故障,Single Point of Failure).Spark可以 ...
- Java进阶(三十五)java int与integer的区别
Java进阶(三十五)java int与Integer的区别 前言 int与Integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而Integer是对象 ...