java使用poi绘制折线图和饼图(用数据绘制和使用excel生成的表格数据)
完整代码在码云地址: https://gitee.com/Min-Duck/line_chart.git
多线折线图
单线折线图
饼图
工具类
import com.gideon.entity.ChartPosition;
import com.gideon.entity.LineChart;
import com.gideon.entity.PieChart;
import org.apache.poi.xddf.usermodel.chart.*;
import org.apache.poi.xssf.usermodel.XSSFChart;
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
import org.apache.poi.xssf.usermodel.XSSFDrawing;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTDLbls;
import org.openxmlformats.schemas.drawingml.x2006.chart.STDLblPos;import java.util.Arrays;
import java.util.List;/*** @author GideonYeung* @date 2020/12/3 17:13*/
public class ChartUtils {private static XSSFChart createDrawingPatriarch(XSSFSheet sheet, ChartPosition chartPosition, String chartTitle) {//创建一个画布XSSFDrawing drawing = sheet.createDrawingPatriarch();//前偏移量四个默认0XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, chartPosition.getCol1(), chartPosition.getRow1(), chartPosition.getCol2(), chartPosition.getRow2());//创建一个chart对象XSSFChart chart = drawing.createChart(anchor);//标题chart.setTitleText(chartTitle);//标题是否覆盖图表chart.setTitleOverlay(false);return chart;}/*** 创建饼图** @param sheet 图表* @see com.gideon.entity.PieChart 饼图数据的封装* @see com.gideon.entity.ChartPosition 饼图的坐标位置*/public static void createPie(XSSFSheet sheet, ChartPosition chartPosition, PieChart pieChart) {String titleName = pieChart.getTitleName();List<String> titleList = pieChart.getTitleList();List<Integer> dataList = pieChart.getDataList();XSSFChart chart = createDrawingPatriarch(sheet, chartPosition, titleName);//图例位置XDDFChartLegend legend = chart.getOrAddLegend();legend.setPosition(LegendPosition.LEFT);//CellRangeAddress(起始行号,终止行号, 起始列号,终止列号)//分类轴标数据,XDDFDataSource<String> countries = XDDFDataSourcesFactory.fromArray(titleList.toArray(new String[]{}));XDDFNumericalDataSource<Integer> values = XDDFDataSourcesFactory.fromArray(dataList.toArray(new Integer[]{}));XDDFChartData data = chart.createData(ChartTypes.PIE, null, null);//设置为可变颜色data.setVaryColors(true);//图表加载数据data.addSeries(countries, values);//绘制chart.plot(data);CTDLbls ctdLbls = chart.getCTChart().getPlotArea().getPieChartArray(0).getSerArray(0).addNewDLbls();ctdLbls.addNewShowVal().setVal(false);ctdLbls.addNewShowLegendKey().setVal(false);//类别名称ctdLbls.addNewShowCatName().setVal(true);//百分比ctdLbls.addNewShowSerName().setVal(false);ctdLbls.addNewShowPercent().setVal(true);//引导线ctdLbls.addNewShowLeaderLines().setVal(true);//分隔符为分行符ctdLbls.setSeparator("\n");//数据标签内ctdLbls.addNewDLblPos().setVal(STDLblPos.Enum.forString("inEnd"));}/*** 创建折线图** @param sheet 图表* @see com.gideon.entity.PieChart 饼图数据的封装* @see com.gideon.entity.ChartPosition 饼图的坐标位置*/public static void createLine(XSSFSheet sheet, ChartPosition chartPosition, LineChart lineChart) {List<Object> xAxisList = lineChart.getXAxisList();List<String> chartTitleList = lineChart.getTitleList();List<List<Integer>> chartDataList = lineChart.getDataList();String chartTitle = lineChart.getChartTitle();XSSFChart chart = createDrawingPatriarch(sheet, chartPosition, chartTitle);//图例位置XDDFChartLegend legend = chart.getOrAddLegend();legend.setPosition(LegendPosition.TOP);//分类轴标(X轴),标题位置XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);//值(Y轴)轴,标题位置XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);//LINE:折线图,XDDFLineChartData data = (XDDFLineChartData) chart.createData(ChartTypes.LINE, bottomAxis, leftAxis);XDDFCategoryDataSource countries = XDDFDataSourcesFactory.fromArray(Arrays.copyOf(xAxisList.toArray(), xAxisList.toArray().length, String[].class));for (int i = 0; i < chartDataList.size(); i++) {List<Integer> floats = chartDataList.get(i);XDDFNumericalDataSource<Integer> dataSource = XDDFDataSourcesFactory.fromArray(floats.toArray(new Integer[]{}));//图表加载数据,折线XDDFLineChartData.Series series = (XDDFLineChartData.Series) data.addSeries(countries, dataSource);series.setTitle(chartTitleList.get(i), null);//直线series.setSmooth(false);//设置标记大小series.setMarkerSize((short) 6);}//绘制chart.plot(data);if (chartDataList.size() == 1) {chart.getCTChart().getPlotArea().getLineChartArray(0).addNewVaryColors().setVal(false);}}/*** 根据列名获取列值(例如getColumnIndexByAddress("A"),返回1代表第一列),具体打开可以看到excel字母*/public static int getColumnIndexByAddress(String columnAddress) {int colNum = 0;for (int i = 0; i < columnAddress.length(); i++) {char ch = columnAddress.charAt(columnAddress.length() - 1 - i);colNum += (ch - 'A' + 1) * Math.pow(26, i);}return colNum - 1;}
java使用poi绘制折线图和饼图(用数据绘制和使用excel生成的表格数据)相关推荐
- python绘制折线图保存_Python利用matplotlib绘制折线图的新手教程
前言 matplotlib是Python中的一个第三方库.主要用于开发2D图表,以渐进式.交互式的方式实现数据可视化,可以更直观的呈现数据,使数据更具说服力. 一.安装matplotlib pip i ...
- Python——定义一个类来进行北京污染物的可视化(pyecharts绘制折线图、饼图、北京地图)
目录 作业基本要求 数据来源 其他要求 一.源代码 二.可视化展示 1.绘制随时间变化曲线图 2.绘制某一时点下污染物占比 3.绘制北京地图下的各个检测站污染情况 编辑 4.分析变量之间的相关性(污 ...
- python绘制折线图保存_Python系统学习 - 绘制简单折线图
今天我们开始学习 "数据可视化"这一章,我们主要是使用matplotlib库,来实现将数据整理以图表等形式显示出来 数据可视化 1.mpl_squares.py: # coding ...
- itextpdf 添加折线图、饼图、柱状图
itextpdf 添加折线图.饼图.柱状图 时隔三年,又要对PDF一顿改版了,此次改版加入了饼图.折线图.柱状图等图形可视化. 文章目录 itextpdf 添加折线图.饼图.柱状图 依赖包 效果图 步 ...
- 第一章 使用 matplotlib 绘制折线图
系列文章目录 第一章 使用 matplotlib 绘制折线图 第二章 使用 matplotlib 绘制条形图 第三章 使用 matplotlib 绘制直方图 第四章 使用 matplotlib 绘制散 ...
- 使用matplotlib绘制折线图(绘制一天当中的气温变化)
matplotlib绘制折线图 一.使用matplotlib绘制一天当中的气温变化 1.假设一天当中每隔两个小时(range(2,26,2))的气温分别是[15,13,14.5,17,20,25,26 ...
- Python绘制折线图、散点图
Python绘图需要下载安装matplotlib模块,它是一个数学绘图库,我们将使用它来制作简单的图表,如折线图和散点图.关于matplotlib模块的下载安装预配置将在后面具体介绍. (一)绘制折线 ...
- 微信小程序:wx-charts动态绘制折线图
微信小程序:wx-charts动态绘制折线图 wx-charts是基于 Canvas的微信小程序主流图表工具,体积小易操作,支持多种图表的绘制,这里主要就动态绘制折线图做出详解,所谓动态,指的是表格的 ...
- java使用poi在word中生成柱状图、折线图、饼图、柱状图+折线图组合图、动态表格、文本替换、图片替换 springboot项目
本文参考地址:https://blog.csdn.net/u014427811/article/details/100771314 在参考文章的基础上,增加了模板样例 模板样例地址 百度网盘 链接:h ...
最新文章
- Node.js Web 模块
- linux 命令行启动虚拟机
- 实战(多图):旧路由器刷panabit系统!一台路由器的新生……
- 网页最少要有一个html标签,PHP_网页开发人员必须知道的10个不常用HTML标签, 网页开发人员常常希望能 - phpStudy...
- 【bzoj】 1412: [ZJOI2009]狼和羊的故事
- 利用Group Conv在单个CNN中实现集成学习
- Android 系统(174)---Android代码分析lint检查篇
- 大型网站技术架构(三)架构核心要素
- 第一次加入博客那,鼓励一下自己先
- 数据库设计的三大范式[学习笔记]
- BZOJ - 2783 树
- 计算机毕业设计论文题目分享
- SQLMap常用命令介绍
- 软件著作权申请表怎么填
- python入门基础要点,入门决定没问题(初学者专属)
- 计算机经常断开网络,当笔记本电脑经常自动断开网络连接时如何解决问题
- Android手机设备唯一标识符
- 腾讯云服务器宝塔面板账号密码忘记
- 生死看淡,不服就GAN(九)----英伟达力作PGGAN实战,生成高清图片
- 解决mysql sum求和返回null问题或IFNULL应用
热门文章
- python编写抽奖小游戏
- 拳王虚拟项目公社:淘宝虚拟货源怎么找?在哪里找虚拟资源,虚拟产品如何找到?
- 一本讲 Android 流畅性的书,应该有什么内容?
- 大咖云集,中国软件名园建设工作座谈会干货分享
- Flying.Swords.of.Dragon.Gate.2011.720p.HDTV.x264-NGB龙门飞甲
- pink老师-简易ATM机案例
- Ubuntu安装HP1018
- 深度解读:中国5G商用,为何渐入歧途?
- linux命令学习(23 24)-su sudo
- C++隐藏任务栏和桌面