SpringMVC框架下使用jfreechart绘制折线图,柱状图,饼状图
java代码
@Controller
public class CityAction { @Autowired
private CityBiz cityBiz; //柱状图
@RequestMapping(value = "getColumnChart")
public ModelAndView getColumnChart(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
throws Exception {
CategoryDataset dataset = getDataSet(cityBiz.findAll());
JFreeChart chart = ChartFactory.createBarChart3D("用户统计报表(所属单位)", // 主标题的名称
"所属单位名称", // X轴的标签
"数量", // Y轴的标签
dataset, // 图标显示的数据集合
PlotOrientation.VERTICAL, // 图像的显示形式(水平或者垂直)
true, // 是否显示子标题
true, // 是否生成提示的标签
true); // 是否生成URL链接 JfreeUtil.setJfreeChart(chart);
// 6. 将图形转换为图片,传到前台
String fileName = ServletUtilities.saveChartAsJPEG(chart, 700, 400, null, request.getSession());
String chartURL = request.getContextPath() + "/chart?filename=" + fileName;
modelMap.put("chartURLBar", chartURL);
return new ModelAndView("index", modelMap);
} //饼状图
@RequestMapping(value = "getColumnpie")
public ModelAndView getColumnpie(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
throws Exception {
DefaultPieDataset dataset = getDataSetpie(cityBiz.findAll()); JFreeChart chart = ChartFactory.createPieChart3D("用户统计报表(所属单位)", // 主标题的名称
dataset, // 图标显示的数据集合
true, // 是否显示子标题
true, // 是否生成提示的标签
true); // 是否生成URL链接 JfreeUtil.setJfreePie(chart); // 6. 将图形转换为图片,传到前台
String fileName = ServletUtilities.saveChartAsJPEG(chart, 700, 400, null, request.getSession());
String chartURL = request.getContextPath() + "/chart?filename=" + fileName;
modelMap.put("chartURLPie", chartURL);
return new ModelAndView("index", modelMap);
} //折线图
@RequestMapping(value = "getColumnLine")
public ModelAndView getColumnLine(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
throws Exception {
DefaultCategoryDataset dataset = getDataSetLine(cityBiz.findAll()); JFreeChart chart = ChartFactory.createLineChart("用户统计报表(所属单位)", // 主标题的名称
"所属单位名称", // X轴的标签
"数量", // Y轴的标签
dataset, // 图标显示的数据集合
PlotOrientation.VERTICAL, // 图像的显示形式(水平或者垂直)
true, // 是否显示子标题
true, // 是否生成提示的标签
true); // 是否生成URL链接 JfreeUtil.setJfreeLine(chart); // 6. 将图形转换为图片,传到前台
String fileName = ServletUtilities.saveChartAsJPEG(chart, 700, 400, null, request.getSession());
String chartURL = request.getContextPath() + "/chart?filename=" + fileName;
modelMap.put("chartURLLine", chartURL);
return new ModelAndView("index", modelMap);
} // 获取柱状图数据集
private CategoryDataset getDataSet(List<City> cityList) {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
if (cityList != null && cityList.size() > 0) {
for (City city : cityList) {
dataset.addValue(city.getCount(), city.getCityname(), city.getFruitname());
}
}
return dataset;
} // 获取饼状图数据集
private DefaultPieDataset getDataSetpie(List<City> cityList) {
DefaultPieDataset dataset = new DefaultPieDataset();
// if (cityList != null && cityList.size() > 0) {
// for (City city : cityList) {
// dataset.addValue(city.getCount(), city.getCityname(),
// city.getFruitname());
// }
// } dataset.setValue("北京", 13);
dataset.setValue("深圳", 6);
dataset.setValue("上海", 2);
return dataset;
} // 获取折线图数据集
private DefaultCategoryDataset getDataSetLine(List<City> cityList) {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
// if (cityList != null && cityList.size() > 0) {
// for (City city : cityList) {
// dataset.addValue(city.getCount(), city.getCityname(),
// city.getFruitname());
// }
// } dataset.addValue(13, "所属单位", "北京");
dataset.addValue(6, "所属单位", "深圳");
dataset.addValue(2, "所属单位", "上海");
dataset.addValue(24, "水果", "香蕉");
dataset.addValue(15, "水果", "梨子");
dataset.addValue(27, "水果", "苹果");
return dataset;
}
}
public class JfreeUtil {
// 柱状图
public static void setJfreeChart(JFreeChart chart) {
// 处理图形上的乱码
// 处理主标题的乱码
chart.getTitle().setFont(new Font("宋体", Font.BOLD, 18));
// 处理子标题乱码
chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));
// 获取图表区域对象
CategoryPlot categoryPlot = (CategoryPlot) chart.getPlot();
// 获取X轴的对象
CategoryAxis3D categoryAxis3D = (CategoryAxis3D) categoryPlot.getDomainAxis();
// 获取Y轴的对象
NumberAxis3D numberAxis3D = (NumberAxis3D) categoryPlot.getRangeAxis();
// 处理X轴上的乱码
categoryAxis3D.setTickLabelFont(new Font("宋体", Font.BOLD, 15));
// 处理X轴外的乱码
categoryAxis3D.setLabelFont(new Font("宋体", Font.BOLD, 15));
// 处理Y轴上的乱码
numberAxis3D.setTickLabelFont(new Font("宋体", Font.BOLD, 15));
// 处理Y轴外的乱码
numberAxis3D.setLabelFont(new Font("宋体", Font.BOLD, 15));
// 处理Y轴上显示的刻度,以1作为1格
numberAxis3D.setAutoTickUnitSelection(false);
NumberTickUnit unit = new NumberTickUnit(1);
numberAxis3D.setTickUnit(unit);
// 获取绘图区域对象
BarRenderer3D barRenderer3D = (BarRenderer3D) categoryPlot.getRenderer();
// 设置柱形图的宽度
barRenderer3D.setMaximumBarWidth(0.07);
// 在图形上显示数字
barRenderer3D.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
barRenderer3D.setBaseItemLabelsVisible(true);
barRenderer3D.setBaseItemLabelFont(new Font("宋体", Font.BOLD, 15));
}
// 饼状图
public static void setJfreePie(JFreeChart chart) {
// 处理图形上的乱码
// 处理主标题的乱码
chart.getTitle().setFont(new Font("宋体", Font.BOLD, 18));
// 处理子标题乱码
chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));
// 获取图表区域对象
PiePlot3D categoryPlot = (PiePlot3D) chart.getPlot();
// 处理图像上的乱码
categoryPlot.setLabelFont(new Font("宋体", Font.BOLD, 15));
// 设置图形的生成格式为(上海 2 (10%))
String format = "{0} {1} ({2})";
categoryPlot.setLabelGenerator(new StandardPieSectionLabelGenerator(format));
// 使用ChartFrame对象显示图像
}
// 折线图
public static void setJfreeLine(JFreeChart chart) {
// 处理图形上的乱码
// 处理主标题的乱码
chart.getTitle().setFont(new Font("宋体", Font.BOLD, 18));
// 处理子标题乱码
chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));
// 获取图表区域对象
CategoryPlot categoryPlot = (CategoryPlot) chart.getPlot();
// 获取X轴的对象
CategoryAxis categoryAxis = (CategoryAxis) categoryPlot.getDomainAxis();
// 获取Y轴的对象
NumberAxis numberAxis = (NumberAxis) categoryPlot.getRangeAxis();
// 处理X轴上的乱码
categoryAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 15));
// 处理X轴外的乱码
categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 15));
// 处理Y轴上的乱码
numberAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 15));
// 处理Y轴外的乱码
numberAxis.setLabelFont(new Font("宋体", Font.BOLD, 15));
// 处理Y轴上显示的刻度,以1作为1格
numberAxis.setAutoTickUnitSelection(false);
NumberTickUnit unit = new NumberTickUnit(1);
numberAxis.setTickUnit(unit);
// 获取绘图区域对象
LineAndShapeRenderer lineAndShapeRenderer = (LineAndShapeRenderer) categoryPlot.getRenderer();
// 在图形上显示数字
lineAndShapeRenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
lineAndShapeRenderer.setBaseItemLabelsVisible(true);
lineAndShapeRenderer.setBaseItemLabelFont(new Font("宋体", Font.BOLD, 15));
// 在图形上添加转折点(使用小矩形显示)
Rectangle shape = new Rectangle(10, 10);
lineAndShapeRenderer.setSeriesShape(0, shape);
lineAndShapeRenderer.setSeriesShapesVisible(0, true);
}
}
jsp页面
<div style="text-align: center">
jfreechart _3D柱状图 <br>
<br> 点击显示柱状图<a href="getColumnChart.action">getMajorChart</a> <br>
<br>
<c:if test="${not empty chartURLBar}">
<img src="${chartURLBar}" width=600 height=400 border=0
color=gray>
</c:if>
</div> <div style="text-align: center">
jfreechart _3D饼状图 <br>
<br> 点击显示饼状图<a href="getColumnpie.action">getMajorChart</a> <br>
<br>
<c:if test="${not empty chartURLPie}">
<img src="${chartURLPie}" width=600 height=400 border=0
color=gray>
</c:if>
</div> <div style="text-align: center">
jfreechart _3D折线状图 <br>
<br> 点击显示折线图<a href="getColumnLine.action">getMajorChart</a> <br>
<br>
<c:if test="${not empty chartURLLine}">
<img src="${chartURLLine}" width=600 height=400 border=0
color=gray>
</c:if>
</div>
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>/chart</url-pattern>
</servlet-mapping> </web-app>
jar包jfreechart1.0.13
SpringMVC框架下使用jfreechart绘制折线图,柱状图,饼状图的更多相关文章
- Android绘图机制(四)——使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美
Android绘图机制(四)--使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美 这里为什么不继续把自定义View写下去呢,因为最近项目 ...
- Qt数据可视化(散点图、折线图、柱状图、盒须图、饼状图、雷达图)开发实例
目录 散点图 折线图 柱状图 水平柱状图 水平堆叠图 水平百分比柱状图 盒须图 饼状图 雷达图 Qt散点图.折线图.柱状图.盒须图.饼状图.雷达图开发实例. 在开发过程中我们会使用多各种各样的图 ...
- java 柱状图、折线图、饼状图
1.绘制柱状图: //BarChartTool工具类代码 package GUIview; import HibernateTool.HibernateTools; import ProductCla ...
- JupyterLab绘制:柱状图,饼状图,直方图,散点图,折线图
JupyterLab绘图 喜欢python的同学,可以到 https://v3u.cn/(刘悦的技术博客) 里面去看看,爬虫,数据库,flask,Django,机器学习,前端知识点,JavaScrip ...
- Android之自定义控件实现天气温度折线图和饼状图
以前写了个天气的APP,最近把他更新了一个版本,就抽取其中的天气温度折现图这个功能写了这篇博客,来与大家分享,希望对你有所帮助. 效果如图: 代码: MainActivity.Java /**** * ...
- ECharts 报表事件联动系列四:柱状图,折线图,饼状图实现联动
代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" c ...
- C# 绘制图表(柱状图,线性图,饼状图)
http://blog.csdn.net/gisfarmer/article/details/3736452 Chart饼状图,每根柱子的宽度: int a = Chart1.Series[" ...
- Android开源图表之树状图和饼状图的官方示例的整理
最近由于工作需要,所以就在github上搜了下关于chart的三方框架 官方地址https://github.com/PhilJay/MPAndroidChart 由于工作需要我这里整理了一份Ecli ...
- PSP 进度条 柱状图 饼状图
9号 类别 开始时间 结束时间 间隔 净时间 燃尽图 8::00 8:20 0 20分钟 站立会议 8:20 8:50 0 30分钟 读构建之法 9:20 13:20 120分钟 120分钟 四人小组 ...
随机推荐
- Educational Codeforces Round 24
A. Diplomas and Certificates time limit per test 1 second memory limit per test 256 megabytes input ...
- 九度oj 题目1012:畅通工程
题目描述: 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路 ...
- iRule Event Order - HTTPSv7
v
- [BZOJ1578] [Usaco2009 Feb]Stock Market 股票市场(DP)
传送门 可以看出 第一天买,第三天卖 == 第一天买,第二天卖完再买,第三天卖 所以我们只考虑前一天买,后一天卖即可 那么有按天数来划分 f[i][j]表示前i天,共有j元,最大的盈利 第一维可以省去 ...
- BZOJ2288 【POJ Challenge】生日礼物 【堆 + 链表】
题目 ftiasch 18岁生日的时候,lqp18_31给她看了一个神奇的序列 A1, A2, ..., AN. 她被允许选择不超过 M 个连续的部分作为自己的生日礼物. 自然地,ftiasch想要知 ...
- LINUX支持哪些文件系统
我们在Linux中常用的文件系统主要有ext3.ext2及reiserfs :Windows和Dos常用的文件系统是fat系列(包括fat16及fat32等)和ntfs 文件系统:光盘文件系统是ISO ...
- 关于时区、时间戳引起的bug理解
时间戳定义:0时区1970年1月1日到现在的毫秒数,所以全世界同一时刻的时间戳都是一样的. 北京时间对应时间戳=unix(0时区对应时间的时间戳)-8*60*60*1000(8小时的毫秒数)----- ...
- linux文件夹作用
linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基 ...
- 封装的一个Worker方法,利用线程处理运行时间较长的js代码
function webWorker(targetFile,content){ var promise=new Promise(function(resolve,reject){ var web=ne ...
- 使用EventNext实现基于事件驱动的业务处理
事件驱动模型相信对大家来说并不陌生,因为这是一套非常高效的逻辑处理模型,通过事件来驱动接下来需要完成的工作,而不像传统同步模型等待任务完成后再继续!虽然事件驱动有着这样的好处,但在传统设计上基于消息回 ...