使用Python在Excel中創(chuàng)建組合圖的完整指南
在實(shí)際業(yè)務(wù)報(bào)表中,我們經(jīng)常會(huì)遇到這樣一種場(chǎng)景:
兩個(gè)指標(biāo)存在關(guān)聯(lián),但量級(jí)差異較大。
例如:
- 銷(xiāo)售額(金額)
- 銷(xiāo)量(件數(shù))
如果將它們放在同一個(gè)縱軸上展示,要么銷(xiāo)量幾乎貼地不可見(jiàn),要么銷(xiāo)售額被壓縮失真。這時(shí),組合圖(Combo Chart)就是更專(zhuān)業(yè)的選擇。
組合圖允許:
- 一個(gè)數(shù)據(jù)系列使用柱狀圖展示
- 另一個(gè)數(shù)據(jù)系列使用折線圖展示
- 同時(shí)支持雙 Y 軸
本文將完整演示如何使用 Python 創(chuàng)建組合圖表,如“柱狀圖 + 折線圖”,并實(shí)現(xiàn)雙 Y 軸展示。
示例基于 Free Spire.XLS for Python,可通過(guò) pip 安裝:
pip install spire.xls.free
1. 初始化工作簿與銷(xiāo)售數(shù)據(jù)
首先創(chuàng)建工作簿,并準(zhǔn)備示例數(shù)據(jù)結(jié)構(gòu)。
from spire.xls import *
# 創(chuàng)建工作簿
workbook = Workbook()
# 獲取工作表
sheet = workbook.Worksheets.get_Item(0)
sheet.Name = "銷(xiāo)售圖表演示"
# 設(shè)置表頭
sheet.Range["A1"].Text = "月份"
sheet.Range["B1"].Text = "銷(xiāo)售額"
sheet.Range["C1"].Text = "銷(xiāo)量"
# 示例數(shù)據(jù)
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注意事項(xiàng):
- 銷(xiāo)售額與銷(xiāo)量必須使用
NumberValue - 否則圖表無(wú)法識(shí)別為數(shù)值型數(shù)據(jù)
2. 創(chuàng)建組合圖對(duì)象
# 添加圖表 chart = sheet.Charts.Add() # 設(shè)置數(shù)據(jù)范圍 chart.DataRange = sheet.AllocatedRange chart.SeriesDataFromRange = False # 設(shè)置組合圖類(lèi)型 chart.ChartType = ExcelChartType.CombinationChart
關(guān)鍵點(diǎn)說(shuō)明:
CombinationChart表示組合圖模式SeriesDataFromRange = False表示按列拆分?jǐn)?shù)據(jù)系列
3. 設(shè)置柱狀圖系列(銷(xiāo)售額)
sales_series = chart.Series.get_Item(0) sales_series.SerieType = ExcelChartType.ColumnStacked sales_series.Name = "銷(xiāo)售額($)" sales_series.UsePrimaryAxis = True
說(shuō)明:
SerieType控制該數(shù)據(jù)系列的圖表類(lèi)型UsePrimaryAxis = True表示使用主 Y 軸(左側(cè))
銷(xiāo)售額通常數(shù)值較大,適合使用柱狀圖進(jìn)行視覺(jué)強(qiáng)調(diào)。
4. 設(shè)置折線圖系列(銷(xiāo)量)
amount_series = chart.Series.get_Item(1) amount_series.SerieType = ExcelChartType.LineMarkers amount_series.Name = "銷(xiāo)量(個(gè))" amount_series.UsePrimaryAxis = False
關(guān)鍵邏輯:
- 折線圖更適合展示趨勢(shì)變化
UsePrimaryAxis = False表示使用副 Y 軸(右側(cè))
通過(guò)雙軸機(jī)制,可以避免數(shù)值比例沖突。
5. 設(shè)置圖表位置與樣式
# 設(shè)置圖表位置 chart.LeftColumn = 4 chart.TopRow = 1 chart.RightColumn = 12 chart.BottomRow = 20 chart.ChartTitle = "2024年銷(xiāo)售趨勢(shì)" chart.Legend.Position = LegendPositionType.Bottom
圖表位置通過(guò)單元格坐標(biāo)控制,這種方式比像素定位更穩(wěn)定。
6. 自動(dòng)調(diào)整列寬并保存文件
sheet.AllocatedRange.AutoFitColumns()
workbook.SaveToFile("CreateCombinationChart.xlsx", FileFormat.Version2016)
workbook.Dispose()生成的 Excel 文件將包含:
- 銷(xiāo)售數(shù)據(jù)表
- 柱狀圖(銷(xiāo)售額)
- 折線圖(銷(xiāo)量)
- 雙 Y 軸結(jié)構(gòu)
無(wú)需手動(dòng)修改即可直接使用。
生成結(jié)果預(yù)覽:

常見(jiàn)組合圖注意事項(xiàng)
| 項(xiàng)目 | 說(shuō)明 |
|---|---|
| 必須使用 CombinationChart | 否則無(wú)法混合圖表類(lèi)型 |
| 單獨(dú)設(shè)置每個(gè) SerieType | 控制不同圖形類(lèi)型 |
| UsePrimaryAxis 控制雙軸 | True 為左軸,F(xiàn)alse 為右軸 |
| 數(shù)據(jù)必須為數(shù)值類(lèi)型 | 使用 NumberValue |
總結(jié)
組合圖并不是簡(jiǎn)單的“兩個(gè)圖疊加”,它是一種表達(dá)結(jié)構(gòu)關(guān)系的工具。
在自動(dòng)化報(bào)表系統(tǒng)中,如果僅生成單一圖表,往往難以滿足管理層對(duì)趨勢(shì)與規(guī)模同時(shí)分析的需求。而通過(guò) Python 自動(dòng)創(chuàng)建組合圖,我們可以:
- 構(gòu)建更專(zhuān)業(yè)的分析報(bào)表
- 自動(dòng)生成雙軸結(jié)構(gòu)
- 提高數(shù)據(jù)表達(dá)的層次感
- 在服務(wù)器端直接輸出完整可視化文件
借助 Python,我們無(wú)需打開(kāi) Excel 界面,即可構(gòu)建具備企業(yè)級(jí)視覺(jué)表達(dá)能力的分析報(bào)表。
當(dāng)自動(dòng)化系統(tǒng)開(kāi)始承擔(dān)經(jīng)營(yíng)分析任務(wù)時(shí),組合圖能力將成為報(bào)表系統(tǒng)的重要組成部分。掌握這一能力,意味著你不僅在生成數(shù)據(jù)文件,而是在輸出真正具備決策價(jià)值的業(yè)務(wù)圖形。
以上就是使用Python在Excel中創(chuàng)建組合圖的完整指南的詳細(xì)內(nèi)容,更多關(guān)于Python Excel創(chuàng)建組合圖的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決csv.writer寫(xiě)入文件有多余的空行問(wèn)題
今天小編就為大家分享一篇解決csv.writer寫(xiě)入文件有多余的空行問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
OpenCV+Python3.5 簡(jiǎn)易手勢(shì)識(shí)別的實(shí)現(xiàn)
這篇文章主要介紹了OpenCV+Python3.5 簡(jiǎn)易手勢(shì)識(shí)別的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Conda虛擬環(huán)境的復(fù)制和遷移過(guò)程
本文介紹了四種在不同操作系統(tǒng)之間復(fù)制和遷移Conda虛擬環(huán)境的方法,包括使用requirements.txt、environment.yml、CondaPack和直接復(fù)制envs目錄下的虛擬環(huán)境文件夾,每種方法都有其適用場(chǎng)景和優(yōu)缺點(diǎn),供根據(jù)具體需求選擇使用2025-11-11
基于Python繪制一個(gè)摸魚(yú)倒計(jì)時(shí)界面
前端時(shí)間推出了一個(gè)摸魚(yú)APP,這篇文章將為大家介紹基于Python繪制一個(gè)摸魚(yú)倒計(jì)時(shí)界面,文中的示例代碼講解詳細(xì),感興趣的可以學(xué)習(xí)一下2021-12-12
Python中canmatrix解析dbc文件應(yīng)用常見(jiàn)示例
DBC是一種用于描述CAN網(wǎng)絡(luò)協(xié)議的文件格式,Python作為一種流行的編程語(yǔ)言,也提供了解析DBC文件的相關(guān)類(lèi)庫(kù),這篇文章主要給大家介紹了關(guān)于Python中canmatrix解析dbc文件的相關(guān)資料,需要的朋友可以參考下2024-08-08
Python函數(shù)中的不定長(zhǎng)參數(shù)相關(guān)知識(shí)總結(jié)
今天給大家?guī)?lái)的是關(guān)于Python函數(shù)的相關(guān)知識(shí),文章圍繞著Python不定長(zhǎng)參數(shù)展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06
Pandas中KeyError: 'Column_Name' not
在使用Pandas進(jìn)行數(shù)據(jù)處理時(shí),KeyError: 'Column_Name' not in index是一種常見(jiàn)的錯(cuò)誤,它通常發(fā)生在嘗試訪問(wèn)DataFrame中不存在的列名時(shí),本文將深入分析這一錯(cuò)誤的原因、提供解決辦法,需要的朋友可以參考下2024-07-07
Python使用urllib模塊對(duì)URL網(wǎng)址中的中文編碼與解碼實(shí)例詳解
這篇文章主要介紹了Python使用urllib模塊對(duì)URL網(wǎng)址中的中文編碼與解碼(Python使用urllib模塊對(duì)URL編碼與解碼)實(shí)例詳解,需要的朋友可以參考下2020-02-02
使用Pytest.main()運(yùn)行時(shí)參數(shù)不生效問(wèn)題解決
本文主要介紹了使用Pytest.main()運(yùn)行時(shí)參數(shù)不生效問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02

