java生成图表_java实现将数据生成图表至excel导出
1. 目的
根据已有数据,手动(java后台)生成图表至excel并导出。用于后台查询到数据后直接创建图表,可以代替直接使用图表信息字符串。
2. 说明
使用jfree图表绘制类库绘制图表,并生成到本地或读取至输出流用于在excel中生成;
使用poi操作excel;
3. 使用jar包
使用maven管理jar包,主要包含poi和jfree:
3.11
org.apache.poi
poi
${poi-version}
org.apache.poi
poi-ooxml
${poi-version}
org.apache.poi
poi-ooxml-schemas
${poi-version}
org.apache.poi
ooxml-schemas
1.1
jfree
jcommon
1.0.16
jfree
jfreechart
1.0.13
4. 实现
4.1 生成饼图
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;
import java.awt.*;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class TestPoiAndJfreeChart {
public static void main(String[] args) throws Exception {
// excel2003工作表
HSSFWorkbook wb = new HSSFWorkbook();
// 创建工作表
HSSFSheet sheet = wb.createSheet("Sheet 1");
// 创建字节输出流
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
//如 果不使用Font,中文将显示不出来
Font font = new Font("新宋体", Font.BOLD, 15);
// 创建数据:饼状图就是名称和值(比例)
Map map=new HashMap();
map.put("录播主机", (double) 1000);
map.put("编码器", (double) 700);
map.put("摄像机", (double) 600);
map.put("流转码服务器", (double) 400);
// 创建JFreeChart
JFreeChart chart = createPort("故障设备类型比例", map, font);
// 读取chart信息至字节输出流
ChartUtilities.writeChartAsPNG(byteArrayOut, chart, 600, 300);
// 画图的顶级管理器,一个sheet只能获取一个(一定要注意这点)
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
// anchor主要用于设置图片的属性
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, (short) 2, (short) 1, (short) 12, (short) 15);
anchor.setAnchorType(3);
// 插入图片
patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG));
// excel2003后缀
FileOutputStream fileOut = new FileOutputStream("h://myExcel4.xls");
wb.write(fileOut);
fileOut.close();
}
public static JFreeChart createPort(String title, Map datas, Font font) {
try {
Set> set = datas.entrySet();
DefaultPieDataset pds = new DefaultPieDataset();
Iterator iterator = set.iterator();
Map.Entry entry;
while (iterator.hasNext()) {
entry = (Map.Entry) iterator.next();
pds.setValue(entry.getKey().toString(), Double.parseDouble(entry.getValue().toString()));
}
// 生成一个饼图的图表:显示图表的标题、组装的数据、是否显示图例、是否生成贴士以及是否生成URL链接
JFreeChart chart = ChartFactory.createPieChart(title, pds, true, false, true);
// 设置图片标题的字体
chart.getTitle().setFont(font);
// 得到图块,准备设置标签的字体
PiePlot plot = (PiePlot) chart.getPlot();
//设置分裂效果,需要指定分裂出去的key
// plot.setExplodePercent("摄像机", 0.1); 分裂效果,可选
// 设置标签字体
plot.setLabelFont(font);
// 设置图例项目字体
chart.getLegend().setItemFont(font);
// 设置开始角度
// plot.setStartAngle(new Float(3.14f / 2f)); 开始角度,意义不大
//设置plot的前景色透明度
plot.setForegroundAlpha(0.7f);
//设置plot的背景色透明度
plot.setBackgroundAlpha(0.0f);
//设置标签生成器(默认{0})
//{0}:key {1}:value {2}:百分比 {3}:sum
plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}({1})/{2}")); // 一般在{1}后面加单位,如:{0}({1}次)/{2}
//将内存中的图片写到本地硬盘
// ChartUtilities.saveChartAsJPEG(new File("H:/a.png"), chart, 600, 300);
return chart;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
饼图.png
4.2 生成折线图
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import java.awt.*;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class TestPoiAndJfreeChart1 {
public static void main(String[] args) throws Exception {
// excel2003工作表
HSSFWorkbook wb = new HSSFWorkbook();
// 创建工作表
HSSFSheet sheet = wb.createSheet("Sheet 1");
// 创建字节输出流
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
//如 果不使用Font,中文将显示不出来
Font font = new Font("新宋体", Font.BOLD, 15);
// 创建数据
Map> datas =new HashMap>();
Map map1=new HashMap();
Map map2=new HashMap();
Map map3=new HashMap();
Map map4=new HashMap();
Map map5=new HashMap();
map1.put("故障数量", (double) 20);
map2.put("故障数量", (double) 30);
map3.put("故障数量", (double) 25);
map4.put("故障数量", (double) 50);
map5.put("故障数量", (double) 40);
//压入数据
datas.put("一月", map1);
datas.put("二月", map2);
datas.put("三月", map3);
datas.put("四月", map4);
datas.put("五月", map5);
JFreeChart chart = createPort("故障数量-时间曲线", datas, "月份", "故障次数(次)", font);
// 读取chart信息至字节输出流
ChartUtilities.writeChartAsPNG(byteArrayOut, chart, 600, 300);
// 画图的顶级管理器,一个sheet只能获取一个(一定要注意这点)
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
// anchor主要用于设置图片的属性
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, (short) 2, (short) 1, (short) 12, (short) 15);
anchor.setAnchorType(3);
// 插入图片
patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG));
// excel2003后缀
FileOutputStream fileOut = new FileOutputStream("h://myExcel5.xls");
wb.write(fileOut);
fileOut.close();
}
public static JFreeChart createPort(String title, Map> datas, String type, String unit, Font font) {
try {
DefaultCategoryDataset ds = new DefaultCategoryDataset();
Set>> set1 = datas.entrySet();
Iterator iterator1 = set1.iterator();
Iterator iterator2;
HashMap map;
Set> set2;
Map.Entry entry1;
Map.Entry entry2;
while (iterator1.hasNext()) {
entry1 = (Map.Entry) iterator1.next();
map = (HashMap) entry1.getValue();
set2 = map.entrySet();
iterator2 = set2.iterator();
while (iterator2.hasNext()) {
entry2 = (Map.Entry) iterator2.next();
ds.setValue(Double.parseDouble(entry2.getValue().toString()), entry2.getKey().toString(), entry1.getKey().toString());
}
}
//创建折线图,折线图分水平显示和垂直显示两种
// //2D折线图
JFreeChart chart = ChartFactory.createLineChart(title, type, unit, ds, PlotOrientation.VERTICAL, true, true, true);
// //3D折线图
// JFreeChart chart2 = ChartFactory.createLineChart3D(title, type, unit, ds, PlotOrientation.VERTICAL, true, true, false);
//设置整个图片的标题字体
chart.getTitle().setFont(font);
//设置提示条字体
font = new Font("宋体", Font.BOLD, 15);
chart.getLegend().setItemFont(font);
//得到绘图区
CategoryPlot plot = (CategoryPlot) chart.getPlot();
//得到绘图区的域轴(横轴),设置标签的字体
plot.getDomainAxis().setLabelFont(font);
//设置横轴标签项字体
plot.getDomainAxis().setTickLabelFont(font);
//设置范围轴(纵轴)字体
font = new Font("宋体", Font.BOLD, 18);
plot.getRangeAxis().setLabelFont(font);
// plot.setForegroundAlpha(1.0f);
return chart;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
折线图.png
4.3 生成柱状图
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import java.awt.*;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class TestPoiAndJfreeChart2 {
public static void main(String[] args) throws Exception {
// excel2003工作表
HSSFWorkbook wb = new HSSFWorkbook();
// 创建工作表
HSSFSheet sheet = wb.createSheet("Sheet 1");
// 创建字节输出流
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
//如 果不使用Font,中文将显示不出来
Font font = new Font("新宋体", Font.BOLD, 15);
// 创建数据
Map> datas =new HashMap>();
Map map1=new HashMap();
Map map2=new HashMap();
Map map3=new HashMap();
map1.put("故障数", (double) 1000);
map2.put("故障数", (double) 1300);
map3.put("故障数", (double) 1000);
//压入数据
datas.put("设备网络掉线", map1);
datas.put("CPU利用率高", map2);
datas.put("磁盘占用高", map3);
JFreeChart chart = createPort("故障类型比例",datas,"故障类型","数量单位(个)",font);
// 读取chart信息至字节输出流
ChartUtilities.writeChartAsPNG(byteArrayOut, chart, 600, 300);
// 画图的顶级管理器,一个sheet只能获取一个(一定要注意这点)
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
// anchor主要用于设置图片的属性
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, (short) 2, (short) 1, (short) 12, (short) 15);
anchor.setAnchorType(3);
// 插入图片
patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG));
// excel2003后缀
FileOutputStream fileOut = new FileOutputStream("h://myExcel6.xls");
wb.write(fileOut);
fileOut.close();
}
public static JFreeChart createPort(String title,Map> datas,String type,String danwei,Font font){
try {
//种类数据集
DefaultCategoryDataset ds = new DefaultCategoryDataset();
//获取迭代器:
Set>> set1 = datas.entrySet();
Iterator iterator1= set1.iterator();
Iterator iterator2;
HashMap map;
Set> set2;
Map.Entry entry1;
Map.Entry entry2;
while(iterator1.hasNext()){
entry1=(Map.Entry) iterator1.next();
map=(HashMap) entry1.getValue();
set2=map.entrySet();
iterator2=set2.iterator();
while (iterator2.hasNext()) {
entry2= (Map.Entry) iterator2.next();
ds.setValue(Double.parseDouble(entry2.getValue().toString()), entry2.getKey().toString(), entry1.getKey().toString());
}
}
//创建柱状图,柱状图分水平显示和垂直显示两种
JFreeChart chart = ChartFactory.createBarChart(title, type, danwei, ds, PlotOrientation.VERTICAL, true, true, true);
//设置整个图片的标题字体
chart.getTitle().setFont(font);
//设置提示条字体
font = new Font("宋体", Font.BOLD, 15);
chart.getLegend().setItemFont(font);
//得到绘图区
CategoryPlot plot = (CategoryPlot) chart.getPlot();
//得到绘图区的域轴(横轴),设置标签的字体
plot.getDomainAxis().setLabelFont(font);
//设置横轴标签项字体
plot.getDomainAxis().setTickLabelFont(font);
//设置范围轴(纵轴)字体
plot.getRangeAxis().setLabelFont(font);
plot.setForegroundAlpha(1.0f);
return chart;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
柱状图.png
5. 补充
java生成图表_java实现将数据生成图表至excel导出相关推荐
- java传入数据库生成柱状图_Java读取数据库数据生成柱状图
此案例是用swing显示数据的.须要引入jfreechart相关包.不同版本号可能包不同样.本人用的是 此案例在ssi框架下会报错,不用框架就没问题. Java后台逻辑代码: public class ...
- 数据分析可视化04 图表组件:Echarts数据可视化图表基础
本课时是课程的第二个模块,环境部署篇的第一个课时.在第一部分的基础理论篇,我向你介绍了数据可视化分析的概念定义.方法体系和关键技术.接下来,我会带你了解基于开源框架,如何部署数据可视化分析的开发环境, ...
- Excel向数据库插入数据和数据库向Excel导出数据
为了熟悉java里工作簿的相关知识点,所以找了"Excel向数据库插入数据和数据库向Excel导出数据"的功能来实现. 注意事项:1,mysql数据库: 2,需要导入的jar包有 ...
- java 复杂报表_Java+POI+模板”一:打造复杂Excel 报表
1 设计思路 Java 对于Excel 的操作一般借助于POI 类库,由于有些报表的表头比较复杂,直接用POI 控制报表的生成比较困难,这时可以先制作Excel 报表模板,而后再通过Java 调用PO ...
- java excel 注解_Java中注解学习系列教程-5 excel导出优化初级阶段
在上一篇文章中,我们实现了使用自定义注解导出Excel的小案例.但是有问题的.我们发现,如果对象属性中包含了date类型或者使用了枚举类.这个时候就会出问题.我们来看看问题所在: 是不是已经看到了结果 ...
- 根据children动态复杂表头excel导出_Java高级特性-注解:注解实现Excel导出功能
注解是 Java 的一个高级特性,Spring 更是以注解为基础,发展出一套"注解驱动编程". 这听起来高大上,但毕竟是框架的事,我们也能用好注解吗? 的确,我们很少有机会自己写注 ...
- java echarts 生成图片_java如何在后台生成echarts图表?实际代码展示
学习是一个永无止境的过程,关于java的学习更是如此.今天主要为大家介绍下,如何在java中后台生成echarts图表,并且为大家展示实际的操作流程. 首先说下它的适用情况:⑴.支持echart4.0 ...
- java模板变量_java freemarker + word 模板 生成 word 文档 (变量替换,数据的循环,表格数据的循环,以及图片的替换)...
1,最近有个需求,动态生成 Word 文当并供前端下载,网上找了一下,发现基本都是用 word 生成 xml 然后用模板替换变量的方式 1.1,这种方式虽然可行,但是生成的 xml 是在是太乱了,整理 ...
- java webservice序列化_java – 可以用CXF生成可序列化的类吗?
我在这里找到了解决方案,如果有人在将来需要它: 1.将此插件添加到pom.xml org.apache.cxf cxf-codegen-plugin ${cxf.version} generate-s ...
- java xml签名_Java使用DSA密钥对生成XML签名的方法
本文实例讲述了Java使用DSA密钥对生成XML签名的方法.分享给大家供大家参考.具体实现方法如下: MainClass.java代码如下: import java.security.KeyPair; ...
最新文章
- php加图片源码_PHP添加文字水印或图片水印的水印类完整源代码与使用示例
- 4)公有成员\私有成员和静态成员
- v8 编译 linux,安装与编译 Javascript V8 Engine
- 流量分析_安恒八月月赛
- 一些常用UI控件汇总
- 论文浅尝 \ 联合知识图谱实例和本体概念的通用表示学习
- 里面怎么使用import引用_谈谈模块化的 require 和 import
- 下轮“双一流”将有高校下车?教育部最新说法来了!
- 51单片机交通灯(十字路口演示)
- Mac上Fortran环境搭建
- Allegro 制作 package
- 精简版oracle客户端程序
- Python编程实现预剪枝的CART决策树
- 关于jxls2.6.0的学习以及遇到的问题(八)
- ubuntu安装系分区,挂载磁盘
- excel输入 正在计算机,在Excel中输入内容后如何自动填写日期和时间
- 信息系统项目管理师考试核心考点汇总
- R语言 创建空的数据框
- 【WebGIS实例】(1)MapboxGL绘制端点有符号的线
- 运维是技术含量最低的岗位吗?自学应该看书还是看视频?答案都在这里!
热门文章
- html固定广告位置,创建固定位置弹出浮动广告的实例代码
- Linux 在线词典
- Office 2010 语言包 Office 2010 En english package 包含office professional plus所有组件,还有viso,project!
- 修改 xweibo 的memcache代码,让xweibo支持wincache,加快xweibo速度
- 黄山IE修复专家免费版 v9.3
- R变量相关性检验(Correlation Test)
- crio电压采集 labview_基于LabVIEW和CompactRIO开发的EDM过程控制器
- 来拥抱星辰大海吧!中国风云气象卫星系列数字藏品荣耀首发
- QT软件开发: 获取CPU序列号、硬盘序列号、主板序列号 (采用wmic命令)
- 疯狂Java讲义(阅读笔记)(第一章)