
在数据分析和报告生成场景中,将数据可视化是提升信息传达效率的关键手段。柱状图作为最常用的图表类型之一,能够直观地展示不同类别之间的数值对比关系。通过 Python 自动化生成 Excel 柱状图,不仅可以批量处理大量数据,还能确保图表格式的一致性和专业性。
本文介绍如何使用 Spire.XLS for Python 库在 Excel 工作表中创建柱状图,并对图表的标题、坐标轴、数据标签、图例等元素进行自定义设置。该方案适用于需要动态生成报表、自动化数据分析流程或批量导出可视化结果的场景。
环境准备
首先需要安装 Spire.XLS for Python 库:
bash
pip install Spire.XLS
该库提供了完整的 Excel 文档操作 API,支持创建、读取、修改和转换 Excel 文件,无需安装 Microsoft Excel 应用程序。
核心实现
创建工作簿并填充数据
创建柱状图的第一步是准备数据源。需要在 Excel 工作表中组织好分类数据和对应的数值数据。
python
from spire.xls.common import *
from spire.xls import *
def CreateChartData(sheet):
# 设置表头和数据
sheet.Range["A1"].Value = "国家"
sheet.Range["A2"].Value = "古巴"
sheet.Range["A3"].Value = "墨西哥"
sheet.Range["A4"].Value = "法国"
sheet.Range["A5"].Value = "德国"
sheet.Range["B1"].Value = "六月"
sheet.Range["B2"].NumberValue = 6000
sheet.Range["B3"].NumberValue = 8000
sheet.Range["B4"].NumberValue = 9000
sheet.Range["B5"].NumberValue = 8500
sheet.Range["C1"].Value = "八月"
sheet.Range["C2"].NumberValue = 3000
sheet.Range["C3"].NumberValue = 2000
sheet.Range["C4"].NumberValue = 2300
sheet.Range["C5"].NumberValue = 4200
# 设置单元格样式
sheet.Range["A1:C1"].RowHeight = 15
sheet.Range["A1:C1"].Style.Color = Color.get_DarkGray()
sheet.Range["A1:C1"].Style.Font.Color = Color.get_White()
sheet.Range["A1:C1"].Style.VerticalAlignment = VerticalAlignType.Center
sheet.Range["A1:C1"].Style.HorizontalAlignment = HorizontalAlignType.Center
sheet.Range["B2:C5"].Style.NumberFormat = "\"$\"#,##0"
# 创建工作簿
workbook = Workbook()
sheet = workbook.Worksheets[0]
sheet.Name = "销售数据"
# 填充图表数据
CreateChartData(sheet)
上述代码创建了一个包含三个列的数据表:第一列为国家名称(分类),第二列和第三列分别为六月和八月的销售数据。通过设置单元格的样式,使表头具有深色背景和白色字体,数值区域使用货币格式显示。
创建基础柱状图
数据准备完成后,可以基于这些数据范围创建柱状图对象。
python
# 添加图表到工作表
chart = sheet.Charts.Add()
# 设置图表数据范围
chart.DataRange = sheet.Range["A1:C5"]
chart.SeriesDataFromRange = False
# 设置图表位置和大小
chart.LeftColumn = 1
chart.TopRow = 6
chart.RightColumn = 11
chart.BottomRow = 29
# 设置图表类型为簇状柱形图
chart.ChartType = ExcelChartType.ColumnClustered
Charts.Add() 方法在工作表中创建一个新的图表对象。通过 DataRange 属性指定图表使用的数据区域,SeriesDataFromRange 设置为 False 表示手动配置系列数据。图表的位置通过行列索引来定义,这里将图表放置在数据下方。
自定义图表标题和坐标轴
图表的可读性很大程度上取决于标题和坐标轴的清晰度。
python
# 设置图表标题
chart.ChartTitle = "各国销售市场分析"
chart.ChartTitleArea.IsBold = True
chart.ChartTitleArea.Size = 12
# 设置分类轴(X轴)
chart.PrimaryCategoryAxis.Title = "国家"
chart.PrimaryCategoryAxis.Font.IsBold = True
chart.PrimaryCategoryAxis.TitleArea.IsBold = True
# 设置数值轴(Y轴)
chart.PrimaryValueAxis.Title = "销售额(美元)"
chart.PrimaryValueAxis.HasMajorGridLines = False
chart.PrimaryValueAxis.MinValue = 1000
chart.PrimaryValueAxis.TitleArea.IsBold = True
chart.PrimaryValueAxis.TitleArea.TextRotationAngle = 90
PrimaryCategoryAxis 代表横坐标轴,用于显示分类标签;PrimaryValueAxis 代表纵坐标轴,用于显示数值刻度。通过设置 HasMajorGridLines = False 可以隐藏主网格线,使图表更加简洁。TextRotationAngle 属性允许旋转坐标轴标题的角度,这里设置为 90 度垂直显示。
配置数据系列和标签
数据系列的视觉效果直接影响图表的信息传达效果。
python
# 配置数据系列
for cs in chart.Series:
cs.Format.Options.IsVaryColor = True
cs.DataPoints.DefaultDataPoint.DataLabels.HasValue = True
IsVaryColor = True 使每个数据点使用不同的颜色,增强视觉区分度。DataLabels.HasValue = True 在每个柱子上方显示具体的数值标签,便于读者快速获取精确数据。
设置图例位置
图例帮助读者理解不同颜色代表的含义。
python
# 设置图例位置
chart.Legend.Position = LegendPositionType.Top
将图例放置在图表顶部可以避免遮挡数据区域,同时保持布局的紧凑性。
保存文件
完成所有设置后,保存工作簿到文件。
python
# 保存文件
workbook.SaveToFile("ClusteredColumn.xlsx", ExcelVersion.Version2010)
workbook.Dispose()
图表效果预览
以下是上述操作创建的柱状图效果:

高级自定义功能
创建三维柱状图
除了二维柱状图,还可以创建具有立体效果的三维柱状图,增强视觉冲击力。
python
# 创建工作簿
workbook_3d = Workbook()
sheet_3d = workbook_3d.Worksheets[0]
sheet_3d.Name = "销售数据"
# 填充数据
CreateChartData(sheet_3d)
# 添加三维柱状图
chart_3d = sheet_3d.Charts.Add()
chart_3d.DataRange = sheet_3d.Range["A1:C5"]
chart_3d.SeriesDataFromRange = False
# 设置位置和大小
chart_3d.LeftColumn = 1
chart_3d.TopRow = 6
chart_3d.RightColumn = 11
chart_3d.BottomRow = 29
# 设置图表类型为三维簇状柱形图
chart_3d.ChartType = ExcelChartType.Column3DClustered
# 设置标题和坐标轴(与二维图表相同)
chart_3d.ChartTitle = "各国销售市场分析"
chart_3d.ChartTitleArea.IsBold = True
chart_3d.ChartTitleArea.Size = 12
chart_3d.PrimaryCategoryAxis.Title = "国家"
chart_3d.PrimaryCategoryAxis.Font.IsBold = True
chart_3d.PrimaryCategoryAxis.TitleArea.IsBold = True
chart_3d.PrimaryValueAxis.Title = "销售额(美元)"
chart_3d.PrimaryValueAxis.HasMajorGridLines = False
chart_3d.PrimaryValueAxis.MinValue = 1000
chart_3d.PrimaryValueAxis.TitleArea.IsBold = True
chart_3d.PrimaryValueAxis.TitleArea.TextRotationAngle = 90
for cs in chart_3d.Series:
cs.Format.Options.IsVaryColor = True
cs.DataPoints.DefaultDataPoint.DataLabels.HasValue = True
chart_3d.Legend.Position = LegendPositionType.Top
# 保存三维图表文件
workbook_3d.SaveToFile("ClusteredColumn_3D.xlsx", ExcelVersion.Version2010)
workbook_3d.Dispose()
效果预览:

三维柱状图通过将 ChartType 设置为 Column3DClustered 来实现。这种图表类型在展示多层级数据或需要强调深度感时特别有用。
调整图表尺寸和位置
在实际应用中,可能需要根据页面布局动态调整图表的大小和位置。
python
# 调整图表位置
chart.LeftColumn = 2
chart.TopRow = 8
# 调整图表大小
chart.RightColumn = 12
chart.BottomRow = 30
通过修改 LeftColumn、TopRow、RightColumn 和 BottomRow 属性,可以精确控制图表在工作表中的位置和尺寸。
自定义数据标签格式
数据标签可以进一步自定义,以显示更丰富的信息。
python
# 获取第一个数据系列
series = chart.Series[0]
# 自定义数据标签
for dataPoint in series.DataPoints:
dataPoint.DataLabels.HasValue = True
dataPoint.DataLabels.HasPercentage = False
dataPoint.DataLabels.Font.Size = 10
dataPoint.DataLabels.Font.Color = Color.get_Blue()
通过遍历数据点,可以为每个数据标签单独设置字体大小、颜色和显示内容。
实用技巧
批量创建多个图表
当需要为不同数据集创建多个图表时,可以使用循环结构简化代码。
python
datasets = [
{"name": "第一季度", "range": "A1:D5"},
{"name": "第二季度", "range": "F1:I5"},
{"name": "第三季度", "range": "A10:D14"}
]
for i, dataset in enumerate(datasets):
chart = sheet.Charts.Add()
chart.DataRange = sheet.Range[dataset["range"]]
chart.ChartType = ExcelChartType.ColumnClustered
chart.ChartTitle = dataset["name"]
chart.TopRow = 6 + i * 25 # 垂直排列图表
这种方法可以快速生成一系列格式统一的图表,适用于季度报告或月度分析场景。
导出图表为图片
生成的图表可以导出为图片格式,便于嵌入到其他文档或网页中。
python
# 将图表保存为图片
chart.SaveToImage("chart.png")
这一功能使得图表可以在 PowerPoint 演示文稿、PDF 报告或 Web 页面中复用。
总结
本文介绍了使用 Python 在 Excel 中创建和自定义柱状图的完整流程。通过 Spire.XLS for Python 库,可以轻松实现以下功能:
- 基于工作表数据创建二维和三维柱状图
- 自定义图表标题、坐标轴、图例和数据标签
- 调整图表的位置、大小和视觉样式
- 批量生成多个图表并导出为图片
这些技术可以应用于自动化报表生成、数据可视化流水线和企业级文档处理系统。通过组合不同的图表类型和自定义选项,可以满足各种复杂的数据展示需求。