POI柱状图x轴多维度

更多参考: https://blog.youkuaiyun.com/u014644574/article/details/105695787


 

		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>4.1.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml-schemas</artifactId>
			<version>4.1.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>4.1.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-scratchpad</artifactId>
			<version>4.1.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-collections4</artifactId>
			<version>4.4</version>
		</dependency>
		<dependency>
			<groupId>commons-codec</groupId>
			<artifactId>commons-codec</artifactId>
			<version>1.13</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-compress</artifactId>
			<version>1.19</version>
		</dependency>
		<dependency>
			<groupId>org.apache.xmlbeans</groupId>
			<artifactId>xmlbeans</artifactId>
			<version>3.1.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>ooxml-schemas</artifactId>
			<version>1.4</version>
		</dependency>

x轴多维度

package com.demo.test;

import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xddf.usermodel.PresetColor;
import org.apache.poi.xddf.usermodel.XDDFColor;
import org.apache.poi.xddf.usermodel.XDDFSolidFillProperties;
import org.apache.poi.xddf.usermodel.chart.AxisCrossBetween;
import org.apache.poi.xddf.usermodel.chart.AxisCrosses;
import org.apache.poi.xddf.usermodel.chart.AxisPosition;
import org.apache.poi.xddf.usermodel.chart.BarDirection;
import org.apache.poi.xddf.usermodel.chart.BarGrouping;
import org.apache.poi.xddf.usermodel.chart.ChartTypes;
import org.apache.poi.xddf.usermodel.chart.LegendPosition;
import org.apache.poi.xddf.usermodel.chart.XDDFBarChartData;
import org.apache.poi.xddf.usermodel.chart.XDDFCategoryAxis;
import org.apache.poi.xddf.usermodel.chart.XDDFCategoryDataSource;
import org.apache.poi.xddf.usermodel.chart.XDDFChartLegend;
import org.apache.poi.xddf.usermodel.chart.XDDFDataSource;
import org.apache.poi.xddf.usermodel.chart.XDDFDataSourcesFactory;
import org.apache.poi.xddf.usermodel.chart.XDDFNumericalDataSource;
import org.apache.poi.xddf.usermodel.chart.XDDFValueAxis;
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.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTBarSer;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTDPt;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTPlotArea;
import org.openxmlformats.schemas.drawingml.x2006.chart.STDLblPos;

public class Test2 {

	public static void main(String[] args) throws IOException {
		XSSFWorkbook wb = new XSSFWorkbook();
		String sheetName = "Sheet1";
		FileOutputStream fileOut = null;
		try {
			XSSFSheet sheet = wb.createSheet(sheetName);
			// 创建一个画布
			XSSFDrawing drawing = sheet.createDrawingPatriarch();
			// 前四个默认0,[0,5]:从0列5行开始;[7,26]:到7列26行结束
			// 默认宽度(14-8)*12
			XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 5, 7, 26);
			// 创建一个chart对象
			XSSFChart chart = drawing.createChart(anchor);
			// 标题
			chart.setTitleText("销售额");
			// 标题覆盖
			chart.setTitleOverlay(false);

			// 图例位置
			XDDFChartLegend legend = chart.getOrAddLegend();
			legend.setPosition(LegendPosition.BOTTOM);

			// 分类轴标(X轴),标题位置
			XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
			// bottomAxis.setTitle("月份");
			// 值(Y轴)轴,标题位置
			XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);
			// leftAxis.setTitle("金额");

			// 分类轴标(X轴)数据
			XDDFCategoryDataSource countries = XDDFDataSourcesFactory.fromArray(new String[] { "202103", "202104", "202105" });
			// Y轴数据1
			XDDFNumericalDataSource<Double> data1 = XDDFDataSourcesFactory.fromArray(new Double[] { 9.8, 1.0, 2.0 });
			// Y轴数据2
			XDDFNumericalDataSource<Double> data2 = XDDFDataSourcesFactory.fromArray(new Double[] { 1.0, 2.0, 3.0 });
			// Y轴数据3
			XDDFNumericalDataSource<Double> data3 = XDDFDataSourcesFactory.fromArray(new Double[] { 7.0, 3.0, 5.0 });
			// Y轴数据4
			XDDFNumericalDataSource<Double> data4 = XDDFDataSourcesFactory.fromArray(new Double[] { 2.0, 5.0, 4.0 });
			// Y轴数据5
			XDDFNumericalDataSource<Double> data5 = XDDFDataSourcesFactory.fromArray(new Double[] { 6.0, 4.0, 7.0 });
			// Y轴数据6
			XDDFNumericalDataSource<Double> data6 = XDDFDataSourcesFactory.fromArray(new Double[] { 3.0, 6.0, 1.0 });

			// bar:条形图,
			XDDFBarChartData bar = (XDDFBarChartData) chart.createData(ChartTypes.BAR, bottomAxis, leftAxis);

			// 构建坐标轴
			leftAxis.setCrosses(AxisCrosses.AUTO_ZERO);
			leftAxis.setCrossBetween(AxisCrossBetween.BETWEEN);
			// 设置为可变颜色
			bar.setVaryColors(false);
			// 条形图方向,纵向/横向:纵向
			bar.setBarDirection(BarDirection.COL);

			// 图表加载数据,条形图1
			XDDFBarChartData.Series series1 = (XDDFBarChartData.Series) bar.addSeries(countries, data1);
			// 条形图例标题
			series1.setTitle("佛山", null);
			// 2种方式设置颜色
			// 方式一
			byte[] cbyte = new byte[] { (byte) 193, (byte) 35, (byte) 43 };
			XDDFSolidFillProperties fill = new XDDFSolidFillProperties(XDDFColor.from(cbyte));
			// 方式二
			// XDDFSolidFillProperties fill = new XDDFSolidFillProperties(XDDFColor.from(PresetColor.RED));
			// 条形图,填充颜色
			series1.setFillProperties(fill);

			// 图表加载数据,条形图2
			XDDFBarChartData.Series series2 = (XDDFBarChartData.Series) bar.addSeries(countries, data2);
			// 条形图例标题
			series2.setTitle("兰州", null);
			XDDFSolidFillProperties fill2 = new XDDFSolidFillProperties(XDDFColor.from(new byte[] { (byte) 39, (byte) 114, (byte) 123 }));
			// 条形图,填充颜色
			series2.setFillProperties(fill2);

			// 图表加载数据,条形图3
			XDDFBarChartData.Series series3 = (XDDFBarChartData.Series) bar.addSeries(countries, data3);
			// 条形图例标题
			series3.setTitle("广州", null);
			XDDFSolidFillProperties fill3 = new XDDFSolidFillProperties(XDDFColor.from(PresetColor.YELLOW));
			// 条形图,填充颜色
			series3.setFillProperties(fill3);

			// 图表加载数据,条形图4
			XDDFBarChartData.Series series4 = (XDDFBarChartData.Series) bar.addSeries(countries, data4);
			// 条形图例标题
			series4.setTitle("武威", null);
			XDDFSolidFillProperties fill4 = new XDDFSolidFillProperties(XDDFColor.from(new byte[] { (byte) 232, (byte) 124, (byte) 37 }));
			// 条形图,填充颜色
			series4.setFillProperties(fill4);

			// 图表加载数据,条形图5
			XDDFBarChartData.Series series5 = (XDDFBarChartData.Series) bar.addSeries(countries, data5);
			// 条形图例标题
			series5.setTitle("深圳", null);
			XDDFSolidFillProperties fill5 = new XDDFSolidFillProperties(XDDFColor.from(new byte[] { (byte) 254, (byte) 132, (byte) 99 }));
			// 条形图,填充颜色
			series5.setFillProperties(fill5);

			// 图表加载数据,条形图5
			XDDFBarChartData.Series series6 = (XDDFBarChartData.Series) bar.addSeries(countries, data6);
			// 条形图例标题
			series6.setTitle("西固", null);
			XDDFSolidFillProperties fill6 = new XDDFSolidFillProperties(XDDFColor.from(PresetColor.BLUE));
			// 条形图,填充颜色
			series6.setFillProperties(fill6);

			// CTPlotArea plotArea = chart.getCTChart().getPlotArea();
			// 绘制
			chart.plot(bar);

			// 打印图表的xml
			// System.out.println(chart.getCTChart());

			// 将输出写入excel文件
			String filename = "销售图表.xlsx";
			fileOut = new FileOutputStream(filename);
			wb.write(fileOut);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			wb.close();
			if (fileOut != null) {
				fileOut.close();
			}
		}

	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值