Python使用Spire.XLS創(chuàng)建柱形圖和條形圖
在日常數(shù)據(jù)分析和報(bào)告制作中,你是否遇到過這些問題:需要手動為幾十份銷售報(bào)告創(chuàng)建圖表,耗時(shí)且易出錯(cuò);客戶要求在不同場景下展示不同維度的數(shù)據(jù)對比,卻不知如何選擇合適的圖表類型;生成的圖表樣式單調(diào),無法直觀展示數(shù)據(jù)關(guān)系?
圖表是 Excel 中強(qiáng)大的數(shù)據(jù)可視化工具,能將復(fù)雜的數(shù)據(jù)轉(zhuǎn)化為直觀的信息。Spire.XLS for Python 提供了便捷的圖表創(chuàng)建功能,讓開發(fā)者能夠僅用幾行代碼就創(chuàng)建各種專業(yè)圖表,包括柱形圖、條形圖、雷達(dá)圖、折線圖等。今天就讓我們來看看,怎么使用 Spire.XLS 創(chuàng)建柱形圖和條形圖。
前期準(zhǔn)備
Spire.XLS for Python 是本教程的核心工具,它提供了豐富的 Excel API,支持高效完成 Excel 文件的創(chuàng)建、編輯和轉(zhuǎn)換操作,無需 Microsoft Office,并且不依賴于任何第三方工具。
安裝它非常簡單:
直接在 cmd 窗口中輸入 pip install Spire.XLS ,然后等待進(jìn)度條結(jié)束,即安裝完成。
又或者訪問 Spire.XLS for Python 下載 壓縮包,解壓縮后從“lib”文件夾中獲取 .whl 文件,再使用 pip 的 install 語句從 .whl 文件安裝就好了。
不僅如此,官方提供了詳細(xì)的安裝指南,它會手把手教你怎么將其安裝到自己的環(huán)境中。
一、柱形圖
Excel 中的簇狀柱形圖和堆疊柱形圖是柱形圖的兩種常見變體。簇狀柱形圖可以直接比較不同類別的值,而堆疊柱形圖既可以顯示每個(gè)類別的總數(shù),也可以顯示其各個(gè)組成部分的比例。本段將介紹如何通過代碼在 Excel 中生成簇狀或堆疊柱形圖。
Python 創(chuàng)建簇狀柱形圖
當(dāng)你想要對比幾個(gè)門店幾個(gè)季度的營業(yè)額時(shí);當(dāng)你要比較幾個(gè)班級幾次考試成績的差異時(shí);當(dāng)你必須分析幾類產(chǎn)品幾個(gè)工廠的次品概率時(shí),簇狀柱形圖可以幫你分塊對比幾類數(shù)據(jù),一目了然。 Spire.XLS for Python 提供的 Worksheet.Charts.Add(ExcelChartType chartType) 方法支持在工作表中添加圖表。其中的 ExcelChartType 枚舉包含 MS Excel 中預(yù)定義的各種圖表類型。
關(guān)鍵步驟如下:
- 創(chuàng)建一個(gè) Workbook 對象。
- 使用 Workbook.LoadFromFile() 方法加載一個(gè)待處理的 Excel 文件
- 使用 Workbook.Worksheets[index] 屬性獲取指定工作表。
- 使用 Worksheet.Charts.Add(ExcelChartType.ColumnClustered) 方法在工作表中添加一個(gè)簇狀柱形圖。
- 使用 Chart.DataRange 屬性設(shè)置圖表數(shù)據(jù)范圍。
- 使用 Chart 對象下的各屬性設(shè)置圖表的位置、標(biāo)題、樣式等。
- 使用 Workbook.SaveToFile() 方法保存結(jié)果文件。
from spire.xls import *
from spire.xls.common import *
# 創(chuàng)建 Workbook 對象
workbook = Workbook()
# 加載Excel文件
workbook.LoadFromFile("Microsoft Excel 工作表.xlsx")
# 獲取第一個(gè)工作表
sheet = workbook.Worksheets[0]
# 添加一個(gè)簇狀柱形圖到工作表
chart = sheet.Charts.Add(ExcelChartType.ColumnClustered)
# 設(shè)置圖表數(shù)據(jù)范圍
chart.DataRange = sheet.Range["A1:D6"]
chart.SeriesDataFromRange = False
# 設(shè)置圖表位置
chart.LeftColumn = 5
chart.TopRow = 1
chart.RightColumn = 14
chart.BottomRow = 21
# 設(shè)置圖表標(biāo)題
chart.ChartTitle = "兒童網(wǎng)絡(luò)書店圖書銷售情況圖"
chart.ChartTitleArea.IsBold = True
chart.ChartTitleArea.Size = 12
# 設(shè)置坐標(biāo)軸標(biāo)題
chart.PrimaryCategoryAxis.Title = "圖書類別"
chart.PrimaryCategoryAxis.Font.IsBold = True
chart.PrimaryCategoryAxis.TitleArea.IsBold = True
chart.PrimaryValueAxis.Title = "銷售額"
chart.PrimaryValueAxis.HasMajorGridLines = False
chart.PrimaryValueAxis.TitleArea.IsBold = True
chart.PrimaryValueAxis.TitleArea.TextRotationAngle = 90
# 設(shè)置圖表系列的顏色、重疊、間隙寬度和數(shù)據(jù)標(biāo)簽
series = chart.Series
for i in range(len(series)):
cs = series[i]
cs.Format.Options.IsVaryColor = True
cs.Format.Options.Overlap = -50
cs.Format.Options.GapWidth = 350
cs.DataPoints.DefaultDataPoint.DataLabels.HasValue = True
# 設(shè)置圖例位置
chart.Legend.Position = LegendPositionType.Right
# 保存結(jié)果文檔
workbook.SaveToFile("簇狀柱形圖.xlsx", ExcelVersion.Version2016)效果預(yù)覽:

程序自動生成的簇狀柱形圖
Python 創(chuàng)建堆疊柱形圖
現(xiàn)在你要關(guān)注于幾個(gè)門店占各個(gè)季度的營業(yè)的額比例變化,同時(shí)還要注意各個(gè)季度的總營業(yè)額變化。堆疊柱形圖將數(shù)據(jù)分類堆疊,用直觀的面積來比較不同的時(shí)間的不同變量的比例關(guān)系,同時(shí)展現(xiàn)總體的變化趨勢,是處理這種復(fù)雜需求的最佳解決方案。 創(chuàng)建堆疊柱形圖的過程與創(chuàng)建簇狀柱形圖基本相同。唯一不同的是,你需要將 Excel 圖表類型從 ColumnClustered 更改為 ColumnStacked。
關(guān)鍵步驟如下:
- 創(chuàng)建一個(gè) Workbook 對象。
- 使用 Workbook.LoadFromFile() 方法加載一個(gè)待處理的 Excel 文件
- 使用 Workbook.Worksheets[index] 屬性獲取指定工作表。
- 使用 Worksheet.Charts.Add(ExcelChartType.ColumnStacked) 方法在工作表中添加一個(gè)堆疊柱形圖。
- 使用 Chart.DataRange 屬性設(shè)置圖表數(shù)據(jù)范圍。
- 使用 Chart 對象下的各屬性設(shè)置圖表的位置、標(biāo)題、樣式等。
- 使用 Workbook.SaveToFile() 方法保存結(jié)果文件。
from spire.xls import *
from spire.xls.common import *
# 創(chuàng)建 Workbook 對象
workbook = Workbook()
# 加載Excel文件
workbook.LoadFromFile("Microsoft Excel 工作表.xlsx")
# 獲取第一個(gè)工作表
sheet = workbook.Worksheets[0]
# 添加一個(gè)堆疊柱形圖到工作表
chart = sheet.Charts.Add(ExcelChartType.ColumnStacked)
# 設(shè)置圖表數(shù)據(jù)范圍
chart.DataRange = sheet.Range["A1:D6"]
chart.SeriesDataFromRange = False
# 設(shè)置圖表位置
chart.LeftColumn = 5
chart.TopRow = 1
chart.RightColumn = 14
chart.BottomRow = 21
# 設(shè)置圖表標(biāo)題
chart.ChartTitle = "兒童網(wǎng)絡(luò)書店圖書銷售情況圖"
chart.ChartTitleArea.IsBold = True
chart.ChartTitleArea.Size = 12
# 設(shè)置坐標(biāo)軸標(biāo)題
chart.PrimaryCategoryAxis.Title = "圖書類別"
chart.PrimaryCategoryAxis.Font.IsBold = True
chart.PrimaryCategoryAxis.TitleArea.IsBold = True
chart.PrimaryValueAxis.Title = "銷售額"
chart.PrimaryValueAxis.HasMajorGridLines = False
chart.PrimaryValueAxis.TitleArea.IsBold = True
chart.PrimaryValueAxis.TitleArea.TextRotationAngle = 90
# 設(shè)置圖表系列的顏色、重疊、間隙寬度和數(shù)據(jù)標(biāo)簽
series = chart.Series
for i in range(len(series)):
cs = series[i]
cs.Format.Options.IsVaryColor = True
cs.Format.Options.GapWidth = 270
cs.DataPoints.DefaultDataPoint.DataLabels.HasValue = True
cs.DataPoints.DefaultDataPoint.DataLabels.Position = DataLabelPositionType.Inside
# 設(shè)置圖例位置
chart.Legend.Position = LegendPositionType.Right
# 保存結(jié)果文檔
workbook.SaveToFile("堆疊柱形圖.xlsx", ExcelVersion.Version2016)效果預(yù)覽:

程序自動生成的堆疊柱形圖
二、條形圖
Excel 中的條形圖是一種使用矩形條來表示分類數(shù)據(jù)的圖表。它與柱形圖相似,但其矩形條是從 Y 軸開始水平延伸的。每個(gè)矩形條的長度與特定類別或組別所代表的值相對應(yīng),通過比較條形圖的長度可以快速識別數(shù)據(jù)變化、趨勢或排名。本段將介紹如何在 Excel 中創(chuàng)建簇狀條形圖或堆疊條形圖。
Python 創(chuàng)建簇狀條形圖
當(dāng)類別名稱較長或類別數(shù)量較多時(shí),傳統(tǒng)的柱形圖可能導(dǎo)致標(biāo)簽重疊難以閱讀。簇狀條形圖通過橫向布局,能更好地展示多類別數(shù)據(jù)對比。 Spire.XLS for Python 提供的 Worksheet.Chart.Add(ExcelChartType chartType) 方法可用于在工作表中添加圖表。要在 Excel 中添加簇狀條形圖,可以將圖表類型設(shè)置為 BarClustered。
關(guān)鍵步驟如下:
- 創(chuàng)建一個(gè) Workbook 類的對象。
- 使用 Workbook.LoadFromFile() 方法加載一個(gè)待處理的 Excel 文件
- 使用 Workbook.Worksheets[index] 屬性獲取特定工作表。
- 使用 Worksheet.Chart.Add(ExcelChartType.BarClustered) 方法在工作表中添加簇狀條形圖。
- 使用 Chart.DataRange 屬性設(shè)置圖表的數(shù)據(jù)范圍。
- 設(shè)置圖表的位置、標(biāo)題、類別軸和數(shù)值軸。
- 使用 Workbook.SaveToFile() 方法保存結(jié)果文件。
from spire.xls.common import *
from spire.xls import *
# 創(chuàng)建Workbook對象
workbook = Workbook()
# 加載Excel文件
workbook.LoadFromFile("Microsoft Excel 工作表.xlsx")
# 獲取第一張工作表
sheet = workbook.Worksheets[0]
# 在工作表中添加簇狀條形圖
chart = sheet.Charts.Add(ExcelChartType.BarClustered)
# 設(shè)置圖表的數(shù)據(jù)范圍
chart.DataRange = sheet.Range["A1:D6"]
chart.SeriesDataFromRange = False
# 設(shè)置圖表位置
chart.LeftColumn = 1
chart.TopRow = 7
chart.RightColumn = 11
chart.BottomRow = 38
# 設(shè)置圖表標(biāo)題及其樣式
chart.ChartTitle = "兒童網(wǎng)絡(luò)書店圖書銷售情況圖"
chart.ChartTitleArea.IsBold = True
chart.ChartTitleArea.Size = 20
# 設(shè)置分類軸名稱及樣式
chart.PrimaryCategoryAxis.Title = "圖書類別"
chart.PrimaryCategoryAxis.Font.IsBold = True
chart.PrimaryCategoryAxis.TitleArea.IsBold = True
chart.PrimaryCategoryAxis.TitleArea.TextRotationAngle = 90
# 設(shè)置數(shù)值軸名稱及樣式
chart.PrimaryValueAxis.Title = "銷售額"
chart.PrimaryValueAxis.HasMajorGridLines = False
chart.PrimaryValueAxis.MinValue = 1000
chart.PrimaryValueAxis.TitleArea.IsBold = True
# 顯示數(shù)據(jù)標(biāo)簽
for cs in chart.Series:
cs.Format.Options.IsVaryColor = True
cs.DataPoints.DefaultDataPoint.DataLabels.HasValue = True
# 設(shè)置圖例位置
chart.Legend.Position = LegendPositionType.Right
# 保存結(jié)果文件
workbook.SaveToFile("簇狀條形圖.xlsx", ExcelVersion.Version2016)
workbook.Dispose()效果預(yù)覽:

程序自動生成的簇狀條形圖
Python 創(chuàng)建堆疊條形圖
當(dāng)需要橫向展示各部分占比和整體對比時(shí),堆疊條形圖能同時(shí)滿足這兩方面需求,特別適合比較多個(gè)類別的構(gòu)成差異。 與柱形圖類似,堆疊條形圖和簇狀條形圖的實(shí)現(xiàn)區(qū)別非常小,要?jiǎng)?chuàng)建堆疊條形圖,只需將 Excel 圖表類型更改為 BarStacked 即可。
關(guān)鍵步驟如下:
- 創(chuàng)建一個(gè) Workbook 類的對象。
- 使用 Workbook.LoadFromFile() 方法加載一個(gè)待處理的 Excel 文件
- 使用 Workbook.Worksheets[index] 屬性獲取特定工作表。
- 使用 Worksheet.Chart.Add(ExcelChartType.BarStacked) 方法在工作表中添加堆疊條形圖。
- 使用 Chart.DataRange 屬性設(shè)置圖表的數(shù)據(jù)范圍。
- 設(shè)置圖表的位置、標(biāo)題、類別軸和數(shù)值軸。
- 使用 Workbook.SaveToFile() 方法保存結(jié)果文件。
from spire.xls.common import *
from spire.xls import *
# 創(chuàng)建Workbook對象
workbook = Workbook()
# 加載Excel文件
workbook.LoadFromFile("Microsoft Excel 工作表.xlsx")
# 獲取第一張工作表
sheet = workbook.Worksheets[0]
# 在工作表中添加簇狀條形圖
chart = sheet.Charts.Add(ExcelChartType.BarStacked)
# 設(shè)置圖表的數(shù)據(jù)范圍
chart.DataRange = sheet.Range["A1:D6"]
chart.SeriesDataFromRange = False
# 設(shè)置圖表位置
chart.LeftColumn = 1
chart.TopRow = 7
chart.RightColumn = 11
chart.BottomRow = 38
# 設(shè)置圖表標(biāo)題及其樣式
chart.ChartTitle = "兒童網(wǎng)絡(luò)書店圖書銷售情況圖"
chart.ChartTitleArea.IsBold = True
chart.ChartTitleArea.Size = 20
# 設(shè)置分類軸名稱及樣式
chart.PrimaryCategoryAxis.Title = "圖書類別"
chart.PrimaryCategoryAxis.Font.IsBold = True
chart.PrimaryCategoryAxis.TitleArea.IsBold = True
chart.PrimaryCategoryAxis.TitleArea.TextRotationAngle = 90
# 設(shè)置數(shù)值軸名稱及樣式
chart.PrimaryValueAxis.Title = "銷售額"
chart.PrimaryValueAxis.HasMajorGridLines = False
chart.PrimaryValueAxis.MinValue = 1000
chart.PrimaryValueAxis.TitleArea.IsBold = True
# 顯示數(shù)據(jù)標(biāo)簽
for cs in chart.Series:
cs.Format.Options.IsVaryColor = True
cs.DataPoints.DefaultDataPoint.DataLabels.HasValue = True
# 設(shè)置圖例位置
chart.Legend.Position = LegendPositionType.Right
# 保存結(jié)果文件
workbook.SaveToFile("堆疊條形圖.xlsx", ExcelVersion.Version2016)
workbook.Dispose()效果預(yù)覽:

程序自動生成的堆疊條形圖
三、總結(jié)與拓展
相信大家都已經(jīng)注意到,以上的所有示例中,示例代碼的樣式都是大體相同的,只有 Worksheet.Chart.Add() 方法的參數(shù)不同。 如此看來,我們只需要在創(chuàng)建圖表時(shí),使用不同的 ExcelChartType 枚舉值傳入 Worksheet.Chart.Add() 方法中,就可以實(shí)現(xiàn)不同種類的圖表:
- 簇狀柱形圖:ExcelChartType.ColumnClustered
- 堆疊柱形圖:ExcelChartType.ColumnStacked
- 簇狀條形圖:ExcelChartType.BarClustered
- 堆疊條形圖:ExcelChartType.BarStacked
結(jié)語
通過本文介紹的四種核心圖表創(chuàng)建方法,我們可以高效解決多種數(shù)據(jù)可視化需求:
- 簇狀柱形圖:垂直對比不同類別的數(shù)據(jù)差異
- 堆疊柱形圖:展示部分與整體的構(gòu)成關(guān)系
- 簇狀條形圖:優(yōu)化多類別數(shù)據(jù)的橫向?qū)Ρ?/li>
- 堆疊條形圖:橫向展示部分占比與整體對比
Spire.XLS for Python 的圖表創(chuàng)建功能能顯著提升數(shù)據(jù)處理效率,特別適用于自動化生成月度/季度銷售報(bào)告、批量創(chuàng)建多份數(shù)據(jù)可視化報(bào)表、動態(tài)調(diào)整圖表類型滿足不同匯報(bào)需求,甚至可以集成到數(shù)據(jù)分析流程中實(shí)現(xiàn)全自動化。
到此這篇關(guān)于Python使用Spire.XLS創(chuàng)建柱形圖和條形圖的文章就介紹到這了,更多相關(guān)Python創(chuàng)建柱形圖和條形圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Jupyter Notebook的連接密碼 token查詢方式
這篇文章主要介紹了Jupyter Notebook的連接密碼 token查詢方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
Python的地形三維可視化Matplotlib和gdal使用實(shí)例
這篇文章主要介紹了Python的地形三維可視化Matplotlib和gdal使用實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以了解下。2017-12-12
python??UPX?is?not?available問題解決方法
這篇文章主要介紹了python?UPX?is?not?available問題解決,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
詳解Python如何查看一個(gè)函數(shù)的參數(shù)
inspect模塊提供了許多用于檢查對象的工具函數(shù),其中包括用于獲取函數(shù)參數(shù)信息的函數(shù),所以在Python中,大家可以使用inspect模塊來查看一個(gè)函數(shù)的參數(shù)信息,本文就來和大家講講具體操作吧2023-05-05
python SQLAlchemy 數(shù)據(jù)庫連接池的實(shí)現(xiàn)
SSQLAlchemy提供了強(qiáng)大的連接池和連接管理功能,可以有效地管理數(shù)據(jù)庫連接,本文主要介紹了python SQLAlchemy 數(shù)據(jù)庫連接池的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03

