Python實(shí)現(xiàn)自動(dòng)生成Excel柱狀圖的完整指南
在數(shù)據(jù)分析和報(bào)告生成場(chǎng)景中,將數(shù)據(jù)可視化是提升信息傳達(dá)效率的關(guān)鍵手段。柱狀圖作為最常用的圖表類型之一,能夠直觀地展示不同類別之間的數(shù)值對(duì)比關(guān)系。通過 Python 自動(dòng)化生成 Excel 柱狀圖,不僅可以批量處理大量數(shù)據(jù),還能確保圖表格式的一致性和專業(yè)性。
本文介紹如何使用 Spire.XLS for Python 庫在 Excel 工作表中創(chuàng)建柱狀圖,并對(duì)圖表的標(biāo)題、坐標(biāo)軸、數(shù)據(jù)標(biāo)簽、圖例等元素進(jìn)行自定義設(shè)置。該方案適用于需要?jiǎng)討B(tài)生成報(bào)表、自動(dòng)化數(shù)據(jù)分析流程或批量導(dǎo)出可視化結(jié)果的場(chǎng)景。
環(huán)境準(zhǔn)備
首先需要安裝 Spire.XLS for Python 庫:
pip install Spire.XLS
該庫提供了完整的 Excel 文檔操作 API,支持創(chuàng)建、讀取、修改和轉(zhuǎn)換 Excel 文件,無需安裝 Microsoft Excel 應(yīng)用程序。
核心實(shí)現(xiàn)
創(chuàng)建工作簿并填充數(shù)據(jù)
創(chuàng)建柱狀圖的第一步是準(zhǔn)備數(shù)據(jù)源。需要在 Excel 工作表中組織好分類數(shù)據(jù)和對(duì)應(yīng)的數(shù)值數(shù)據(jù)。
from spire.xls.common import *
from spire.xls import *
def CreateChartData(sheet):
# 設(shè)置表頭和數(shù)據(jù)
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
# 設(shè)置單元格樣式
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"
# 創(chuàng)建工作簿
workbook = Workbook()
sheet = workbook.Worksheets[0]
sheet.Name = "銷售數(shù)據(jù)"
# 填充圖表數(shù)據(jù)
CreateChartData(sheet)
上述代碼創(chuàng)建了一個(gè)包含三個(gè)列的數(shù)據(jù)表:第一列為國家名稱(分類),第二列和第三列分別為六月和八月的銷售數(shù)據(jù)。通過設(shè)置單元格的樣式,使表頭具有深色背景和白色字體,數(shù)值區(qū)域使用貨幣格式顯示。
創(chuàng)建基礎(chǔ)柱狀圖
數(shù)據(jù)準(zhǔn)備完成后,可以基于這些數(shù)據(jù)范圍創(chuàng)建柱狀圖對(duì)象。
# 添加圖表到工作表 chart = sheet.Charts.Add() # 設(shè)置圖表數(shù)據(jù)范圍 chart.DataRange = sheet.Range["A1:C5"] chart.SeriesDataFromRange = False # 設(shè)置圖表位置和大小 chart.LeftColumn = 1 chart.TopRow = 6 chart.RightColumn = 11 chart.BottomRow = 29 # 設(shè)置圖表類型為簇狀柱形圖 chart.ChartType = ExcelChartType.ColumnClustered
Charts.Add() 方法在工作表中創(chuàng)建一個(gè)新的圖表對(duì)象。通過 DataRange 屬性指定圖表使用的數(shù)據(jù)區(qū)域,SeriesDataFromRange 設(shè)置為 False 表示手動(dòng)配置系列數(shù)據(jù)。圖表的位置通過行列索引來定義,這里將圖表放置在數(shù)據(jù)下方。
自定義圖表標(biāo)題和坐標(biāo)軸
圖表的可讀性很大程度上取決于標(biāo)題和坐標(biāo)軸的清晰度。
# 設(shè)置圖表標(biāo)題 chart.ChartTitle = "各國銷售市場(chǎng)分析" chart.ChartTitleArea.IsBold = True chart.ChartTitleArea.Size = 12 # 設(shè)置分類軸(X軸) chart.PrimaryCategoryAxis.Title = "國家" chart.PrimaryCategoryAxis.Font.IsBold = True chart.PrimaryCategoryAxis.TitleArea.IsBold = True # 設(shè)置數(shù)值軸(Y軸) chart.PrimaryValueAxis.Title = "銷售額(美元)" chart.PrimaryValueAxis.HasMajorGridLines = False chart.PrimaryValueAxis.MinValue = 1000 chart.PrimaryValueAxis.TitleArea.IsBold = True chart.PrimaryValueAxis.TitleArea.TextRotationAngle = 90
PrimaryCategoryAxis 代表橫坐標(biāo)軸,用于顯示分類標(biāo)簽;PrimaryValueAxis 代表縱坐標(biāo)軸,用于顯示數(shù)值刻度。通過設(shè)置 HasMajorGridLines = False 可以隱藏主網(wǎng)格線,使圖表更加簡(jiǎn)潔。TextRotationAngle 屬性允許旋轉(zhuǎn)坐標(biāo)軸標(biāo)題的角度,這里設(shè)置為 90 度垂直顯示。
配置數(shù)據(jù)系列和標(biāo)簽
數(shù)據(jù)系列的視覺效果直接影響圖表的信息傳達(dá)效果。
# 配置數(shù)據(jù)系列
for cs in chart.Series:
cs.Format.Options.IsVaryColor = True
cs.DataPoints.DefaultDataPoint.DataLabels.HasValue = True
IsVaryColor = True 使每個(gè)數(shù)據(jù)點(diǎn)使用不同的顏色,增強(qiáng)視覺區(qū)分度。DataLabels.HasValue = True 在每個(gè)柱子上方顯示具體的數(shù)值標(biāo)簽,便于讀者快速獲取精確數(shù)據(jù)。
設(shè)置圖例位置
圖例幫助讀者理解不同顏色代表的含義。
# 設(shè)置圖例位置 chart.Legend.Position = LegendPositionType.Top
將圖例放置在圖表頂部可以避免遮擋數(shù)據(jù)區(qū)域,同時(shí)保持布局的緊湊性。
保存文件
完成所有設(shè)置后,保存工作簿到文件。
# 保存文件
workbook.SaveToFile("ClusteredColumn.xlsx", ExcelVersion.Version2010)
workbook.Dispose()
圖表效果預(yù)覽
以下是上述操作創(chuàng)建的柱狀圖效果:

高級(jí)自定義功能
創(chuàng)建三維柱狀圖
除了二維柱狀圖,還可以創(chuàng)建具有立體效果的三維柱狀圖,增強(qiáng)視覺沖擊力。
# 創(chuàng)建工作簿
workbook_3d = Workbook()
sheet_3d = workbook_3d.Worksheets[0]
sheet_3d.Name = "銷售數(shù)據(jù)"
# 填充數(shù)據(jù)
CreateChartData(sheet_3d)
# 添加三維柱狀圖
chart_3d = sheet_3d.Charts.Add()
chart_3d.DataRange = sheet_3d.Range["A1:C5"]
chart_3d.SeriesDataFromRange = False
# 設(shè)置位置和大小
chart_3d.LeftColumn = 1
chart_3d.TopRow = 6
chart_3d.RightColumn = 11
chart_3d.BottomRow = 29
# 設(shè)置圖表類型為三維簇狀柱形圖
chart_3d.ChartType = ExcelChartType.Column3DClustered
# 設(shè)置標(biāo)題和坐標(biāo)軸(與二維圖表相同)
chart_3d.ChartTitle = "各國銷售市場(chǎng)分析"
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()
效果預(yù)覽:

三維柱狀圖通過將 ChartType 設(shè)置為 Column3DClustered 來實(shí)現(xiàn)。這種圖表類型在展示多層級(jí)數(shù)據(jù)或需要強(qiáng)調(diào)深度感時(shí)特別有用。
調(diào)整圖表尺寸和位置
在實(shí)際應(yīng)用中,可能需要根據(jù)頁面布局動(dòng)態(tài)調(diào)整圖表的大小和位置。
# 調(diào)整圖表位置 chart.LeftColumn = 2 chart.TopRow = 8 # 調(diào)整圖表大小 chart.RightColumn = 12 chart.BottomRow = 30
通過修改 LeftColumn、TopRow、RightColumn 和 BottomRow 屬性,可以精確控制圖表在工作表中的位置和尺寸。
自定義數(shù)據(jù)標(biāo)簽格式
數(shù)據(jù)標(biāo)簽可以進(jìn)一步自定義,以顯示更豐富的信息。
# 獲取第一個(gè)數(shù)據(jù)系列
series = chart.Series[0]
# 自定義數(shù)據(jù)標(biāo)簽
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()
通過遍歷數(shù)據(jù)點(diǎn),可以為每個(gè)數(shù)據(jù)標(biāo)簽單獨(dú)設(shè)置字體大小、顏色和顯示內(nèi)容。
實(shí)用技巧
批量創(chuàng)建多個(gè)圖表
當(dāng)需要為不同數(shù)據(jù)集創(chuàng)建多個(gè)圖表時(shí),可以使用循環(huán)結(jié)構(gòu)簡(jiǎn)化代碼。
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 # 垂直排列圖表
這種方法可以快速生成一系列格式統(tǒng)一的圖表,適用于季度報(bào)告或月度分析場(chǎng)景。
導(dǎo)出圖表為圖片
生成的圖表可以導(dǎo)出為圖片格式,便于嵌入到其他文檔或網(wǎng)頁中。
# 將圖表保存為圖片
chart.SaveToImage("chart.png")
這一功能使得圖表可以在 PowerPoint 演示文稿、PDF 報(bào)告或 Web 頁面中復(fù)用。
總結(jié)
本文介紹了使用 Python 在 Excel 中創(chuàng)建和自定義柱狀圖的完整流程。通過 Spire.XLS for Python 庫,可以輕松實(shí)現(xiàn)以下功能:
- 基于工作表數(shù)據(jù)創(chuàng)建二維和三維柱狀圖
- 自定義圖表標(biāo)題、坐標(biāo)軸、圖例和數(shù)據(jù)標(biāo)簽
- 調(diào)整圖表的位置、大小和視覺樣式
- 批量生成多個(gè)圖表并導(dǎo)出為圖片
這些技術(shù)可以應(yīng)用于自動(dòng)化報(bào)表生成、數(shù)據(jù)可視化流水線和企業(yè)級(jí)文檔處理系統(tǒng)。通過組合不同的圖表類型和自定義選項(xiàng),可以滿足各種復(fù)雜的數(shù)據(jù)展示需求。
到此這篇關(guān)于Python實(shí)現(xiàn)自動(dòng)生成Excel柱狀圖的完整指南的文章就介紹到這了,更多相關(guān)Python生成Excel柱狀圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)多進(jìn)程代碼示例
Python中大部分情況下都需要使用多進(jìn)程,Python中提供了multiprocessing這個(gè)包實(shí)現(xiàn)多進(jìn)程。multiprocessing支持子進(jìn)程、進(jìn)程間的同步與通信,本文就詳細(xì)的介紹一下2018-10-10
python執(zhí)行系統(tǒng)命令4種方法與比較
這篇文章主要介紹了python執(zhí)行系統(tǒng)命令4種方法與比較,需要的朋友可以參考下2021-04-04
Pycharm中安裝pywin32報(bào)錯(cuò)問題及解決
這篇文章主要介紹了Pycharm中安裝pywin32報(bào)錯(cuò)問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
Python 安裝setuptools和pip工具操作方法(必看)
下面小編就為大家?guī)硪黄狿ython 安裝setuptools和pip工具操作方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05
在pycharm中創(chuàng)建django項(xiàng)目的示例代碼
這篇文章主要介紹了在pycharm中創(chuàng)建django項(xiàng)目的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
Python機(jī)器學(xué)習(xí)之PCA降維算法詳解
今天帶大家復(fù)習(xí)python機(jī)器學(xué)習(xí)的知識(shí)點(diǎn),文中對(duì)PCA降維算法介紹的非常詳細(xì),對(duì)正在學(xué)習(xí)python機(jī)器學(xué)習(xí)的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05

