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

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

