使用Python在Excel中创建组合图的完整指南

 更新时间:2026年03月16日 09:31:35   作者:大丸子  
本文详细介绍了如何使用Python和FreeSpire.XLSforPython创建组合图表,包括柱状图和折线图的设置,以及如何实现双Y轴展示,组合图适用于两个量级差异较大的指标展示,通过双轴机制避免数值比例冲突,便于同时分析趋势和规模,需要的朋友可以参考下

在实际业务报表中,我们经常会遇到这样一种场景:
两个指标存在关联,但量级差异较大。

例如:

  • 销售额(金额)
  • 销量(件数)

如果将它们放在同一个纵轴上展示,要么销量几乎贴地不可见,要么销售额被压缩失真。这时,组合图(Combo Chart)就是更专业的选择。

组合图允许:

  • 一个数据系列使用柱状图展示
  • 另一个数据系列使用折线图展示
  • 同时支持双 Y 轴

本文将完整演示如何使用 Python 创建组合图表,如“柱状图 + 折线图”,并实现双 Y 轴展示。

示例基于 Free Spire.XLS for Python,可通过 pip 安装:

pip install spire.xls.free

1. 初始化工作簿与销售数据

首先创建工作簿,并准备示例数据结构。

from spire.xls import *
# 创建工作簿
workbook = Workbook()
# 获取工作表
sheet = workbook.Worksheets.get_Item(0)
sheet.Name = "销售图表演示"
# 设置表头
sheet.Range["A1"].Text = "月份"
sheet.Range["B1"].Text = "销售额"
sheet.Range["C1"].Text = "销量"
# 示例数据
data = [
    ("1月", 12000, 300),
    ("2月", 18500, 420),
    ("3月", 15000, 360),
    ("4月", 21000, 500),
    ("5月", 19500, 460),
]
row = 2
for item in data:
    sheet.Range[f"A{row}"].Text = item[0]
    sheet.Range[f"B{row}"].NumberValue = item[1]
    sheet.Range[f"C{row}"].NumberValue = item[2]
    row += 1

注意事项:

  • 销售额与销量必须使用 NumberValue
  • 否则图表无法识别为数值型数据

2. 创建组合图对象

# 添加图表
chart = sheet.Charts.Add()
# 设置数据范围
chart.DataRange = sheet.AllocatedRange
chart.SeriesDataFromRange = False
# 设置组合图类型
chart.ChartType = ExcelChartType.CombinationChart

关键点说明:

  • CombinationChart 表示组合图模式
  • SeriesDataFromRange = False 表示按列拆分数据系列

3. 设置柱状图系列(销售额)

sales_series = chart.Series.get_Item(0)
sales_series.SerieType = ExcelChartType.ColumnStacked
sales_series.Name = "销售额($)"
sales_series.UsePrimaryAxis = True

说明:

  • SerieType 控制该数据系列的图表类型
  • UsePrimaryAxis = True 表示使用主 Y 轴(左侧)

销售额通常数值较大,适合使用柱状图进行视觉强调。

4. 设置折线图系列(销量)

amount_series = chart.Series.get_Item(1)
amount_series.SerieType = ExcelChartType.LineMarkers
amount_series.Name = "销量(个)"
amount_series.UsePrimaryAxis = False

关键逻辑:

  • 折线图更适合展示趋势变化
  • UsePrimaryAxis = False 表示使用副 Y 轴(右侧)

通过双轴机制,可以避免数值比例冲突。

5. 设置图表位置与样式

# 设置图表位置
chart.LeftColumn = 4
chart.TopRow = 1
chart.RightColumn = 12
chart.BottomRow = 20
chart.ChartTitle = "2024年销售趋势"
chart.Legend.Position = LegendPositionType.Bottom

图表位置通过单元格坐标控制,这种方式比像素定位更稳定。

6. 自动调整列宽并保存文件

sheet.AllocatedRange.AutoFitColumns()
workbook.SaveToFile("CreateCombinationChart.xlsx", FileFormat.Version2016)
workbook.Dispose()

生成的 Excel 文件将包含:

  • 销售数据表
  • 柱状图(销售额)
  • 折线图(销量)
  • 双 Y 轴结构

无需手动修改即可直接使用。

生成结果预览:

常见组合图注意事项

项目说明
必须使用 CombinationChart否则无法混合图表类型
单独设置每个 SerieType控制不同图形类型
UsePrimaryAxis 控制双轴True 为左轴,False 为右轴
数据必须为数值类型使用 NumberValue

总结

组合图并不是简单的“两个图叠加”,它是一种表达结构关系的工具。

在自动化报表系统中,如果仅生成单一图表,往往难以满足管理层对趋势与规模同时分析的需求。而通过 Python 自动创建组合图,我们可以:

  • 构建更专业的分析报表
  • 自动生成双轴结构
  • 提高数据表达的层次感
  • 在服务器端直接输出完整可视化文件

借助 Python,我们无需打开 Excel 界面,即可构建具备企业级视觉表达能力的分析报表。

当自动化系统开始承担经营分析任务时,组合图能力将成为报表系统的重要组成部分。掌握这一能力,意味着你不仅在生成数据文件,而是在输出真正具备决策价值的业务图形。

以上就是使用Python在Excel中创建组合图的完整指南的详细内容,更多关于Python Excel创建组合图的资料请关注脚本之家其它相关文章!

相关文章

  • 解决csv.writer写入文件有多余的空行问题

    解决csv.writer写入文件有多余的空行问题

    今天小编就为大家分享一篇解决csv.writer写入文件有多余的空行问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • OpenCV+Python3.5 简易手势识别的实现

    OpenCV+Python3.5 简易手势识别的实现

    这篇文章主要介绍了OpenCV+Python3.5 简易手势识别的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Conda虚拟环境的复制和迁移过程

    Conda虚拟环境的复制和迁移过程

    本文介绍了四种在不同操作系统之间复制和迁移Conda虚拟环境的方法,包括使用requirements.txt、environment.yml、CondaPack和直接复制envs目录下的虚拟环境文件夹,每种方法都有其适用场景和优缺点,供根据具体需求选择使用
    2025-11-11
  • 基于Python绘制一个摸鱼倒计时界面

    基于Python绘制一个摸鱼倒计时界面

    前端时间推出了一个摸鱼APP,这篇文章将为大家介绍基于Python绘制一个摸鱼倒计时界面,文中的示例代码讲解详细,感兴趣的可以学习一下
    2021-12-12
  • Python函数基本使用原理详解

    Python函数基本使用原理详解

    这篇文章主要介绍了Python函数基本使用原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Python中canmatrix解析dbc文件应用常见示例

    Python中canmatrix解析dbc文件应用常见示例

    DBC是一种用于描述CAN网络协议的文件格式,Python作为一种流行的编程语言,也提供了解析DBC文件的相关类库,这篇文章主要给大家介绍了关于Python中canmatrix解析dbc文件的相关资料,需要的朋友可以参考下
    2024-08-08
  • Python函数中的不定长参数相关知识总结

    Python函数中的不定长参数相关知识总结

    今天给大家带来的是关于Python函数的相关知识,文章围绕着Python不定长参数展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Pandas中KeyError: 'Column_Name' not in index”的报错分析

    Pandas中KeyError: 'Column_Name' not 

    在使用Pandas进行数据处理时,KeyError: 'Column_Name' not in index是一种常见的错误,它通常发生在尝试访问DataFrame中不存在的列名时,本文将深入分析这一错误的原因、提供解决办法,需要的朋友可以参考下
    2024-07-07
  • Python使用urllib模块对URL网址中的中文编码与解码实例详解

    Python使用urllib模块对URL网址中的中文编码与解码实例详解

    这篇文章主要介绍了Python使用urllib模块对URL网址中的中文编码与解码(Python使用urllib模块对URL编码与解码)实例详解,需要的朋友可以参考下
    2020-02-02
  • 使用Pytest.main()运行时参数不生效问题解决

    使用Pytest.main()运行时参数不生效问题解决

    本文主要介绍了使用Pytest.main()运行时参数不生效问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02

最新评论