基于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 ...
随机推荐
- 自定义View总结2
自定义控件: 1.组合控件:将系统原生控件组合起来,加上动画效果,形成一种特殊的UI效果 2.纯粹自定义控件:继承自系统的View,自己去实现view效果 优酷菜单: 1.系统原生的旋转和位置动画并没 ...
- Docker学习笔记3:CentOS7下安装Docker-Compose
Docker-Compose是一个部署多个容器的简单但是非常必要的工具. 安装Docker-Compose之前,请先安装 python-pip,请参考我的另一篇博文CentOS7下安装python-p ...
- Android support library支持包常用控件介绍(一)
谷歌官方推出Material Design 设计理念已经有段时间了,为支持更方便的实现Material Design设计效果,官方给出了Android support design library 支 ...
- Android图表库MPAndroidChart(七)—饼状图可以再简单一点
Android图表库MPAndroidChart(七)-饼状图可以再简单一点 接上文,今天实现的是用的很多的,作用在统计上的饼状图,我们看下今天的效果 这个效果,我们实现,和之前一样的套路,我先来说下 ...
- Cocoa层粒子发射器动画添加多个cell的一种重构
在iOS动画之旅第19章中最后的挑战中需要我们在雪花例子发生器中添加多个雪花贴图,也就是多个cell,因为我们不可能将每个cell的参数都重新写一遍,所以有必要写一个helper方法来做这件事: fu ...
- Android4.3 屏蔽HOME按键返回桌面详解(源码环境下)
点击打开链接 首先声明我是做系统开发的(高通平台),所以下面介绍的方法并不适合应用开发者. 最经有个需求要屏蔽HOME按键返回桌面并且实现自己的功能,发现以前的方式报错用不了,上网搜索了一下,发现都是 ...
- GDAL库扩展Landsat系列MTL文件格式支持
Landsat系列卫星提供的数据,一般都是每个波段一个tif文件,然后外加一个MTL.txt的元数据文件,使用gdal可以直接打开每个波段的tif文件,但是有时候想在打开tif数据的同时能够自动读取M ...
- Mybatis源码分析之缓存
一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Se ...
- 15 ActionBar 总结
ActionBar 一, 说明 是一个动作栏 是窗口特性 提供给用户动作 导航模式 可以适配不同的屏幕 二, ActionBar 提供的功能 1. 显示菜单项 always:总是展示到ActionBa ...
- 1090. Highest Price in Supply Chain (25) -计层的BFS改进
题目如下: A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyon ...