使用Python在Excel工作表中創(chuàng)建圖表的實現(xiàn)步驟
引言
在現(xiàn)代企業(yè)中,數(shù)據(jù)驅(qū)動的決策變得越來越重要。從銷售分析到市場趨勢跟蹤,再到項目績效考核,清晰直觀的數(shù)據(jù)呈現(xiàn)不僅能提高分析效率,也能增強(qiáng)管理層的決策信心。Excel 作為企業(yè)中最常用的數(shù)據(jù)分析工具,其強(qiáng)大的表格和圖表功能在日常工作中不可或缺。然而,當(dāng)面對成百上千條數(shù)據(jù)或需要生成定期報告時,手動制作圖表不僅耗時,還容易出錯。而 Python 擁有豐富的生態(tài)和強(qiáng)大的數(shù)據(jù)處理能力,通過編程實現(xiàn) Excel 圖表自動化生成,既可以保證數(shù)據(jù)準(zhǔn)確性,也可以大幅提升效率。
本文將使用 Free Spire.XLS for Python 展示如何在 Excel 中創(chuàng)建柱狀圖、折線圖、餅圖及氣泡圖,結(jié)合實際業(yè)務(wù)場景的數(shù)據(jù)示例,幫助你快速掌握自動化可視化技能。
1. 環(huán)境準(zhǔn)備與庫安裝
首先需要安裝 Free Spire.XLS for Python:
pip install spire.xls.free
安裝完成后,我們可以開始創(chuàng)建 Excel 工作簿并準(zhǔn)備數(shù)據(jù)。下面是一個創(chuàng)建 Excel 文件的簡單示例:
from spire.xls import Workbook
# 創(chuàng)建一個新的工作簿
wb = Workbook()
sheet = wb.Worksheets[0]
sheet.Name = "銷售數(shù)據(jù)"
# 保存初始文件
wb.SaveToFile("SalesData.xlsx")
wb.Dispose()
print("Excel 文件已創(chuàng)建:SalesData.xlsx")說明:Workbook 對象代表整個 Excel 文件,Worksheets[0] 獲取第一個工作表。這里我們創(chuàng)建了一個名為“銷售數(shù)據(jù)”的工作表,為后續(xù)寫入數(shù)據(jù)和生成圖表做好準(zhǔn)備。
注意:新建的Excel工作簿有三個默認(rèn)的工作表,Sheet1、Sheet2、Sheet3,可根據(jù)需要直接讀取編輯或清除后重新創(chuàng)建。
2. 在 Excel 中寫入業(yè)務(wù)數(shù)據(jù)
假設(shè)我們正在分析一個季度內(nèi)不同地區(qū)的銷售額情況。我們可以在代碼中直接生成數(shù)據(jù):
from spire.xls import Workbook
wb = Workbook()
sheet = wb.Worksheets[0]
sheet.Name = "銷售數(shù)據(jù)"
# 寫入表頭
headers = ["地區(qū)", "產(chǎn)品", "銷售額 (萬元)"]
for col, header in enumerate(headers, start=1):
sheet.Range[1, col].Text = header
# 寫入示例數(shù)據(jù)
sales_data = [
["華東", "筆記本電腦", 120],
["華東", "平板電腦", 85],
["華北", "筆記本電腦", 95],
["華北", "平板電腦", 70],
["華南", "筆記本電腦", 110],
["華南", "平板電腦", 90],
]
for row, data in enumerate(sales_data, start=2):
for col, value in enumerate(data, start=1):
if isinstance(value, str):
sheet.Range[row, col].Value = value
else:
sheet.Range[row, col].NumberValue = value
# 自動調(diào)整列寬
sheet.Range.AutoFitColumns()
wb.SaveToFile("SalesData.xlsx")
wb.Dispose()
print("業(yè)務(wù)數(shù)據(jù)已寫入 Excel 文件")工作表預(yù)覽:

說明:
這里我們模擬了三個區(qū)域、兩類產(chǎn)品的季度銷售數(shù)據(jù),更貼近實際業(yè)務(wù)場景,便于生成有意義的圖表。
3. 創(chuàng)建柱狀圖:不同地區(qū)產(chǎn)品銷售對比
柱狀圖適合展示不同類別的對比情況。我們以銷售額為數(shù)據(jù)創(chuàng)建柱狀圖:
from spire.xls import Workbook, ExcelChartType, Color
wb = Workbook()
wb.LoadFromFile("SalesData.xlsx")
sheet = wb.Worksheets[0]
# 添加柱狀圖
chart = sheet.Charts.Add()
chart.DataRange = sheet.Range["A1:C7"] # 包含表頭和數(shù)據(jù)
chart.SeriesDataFromRange = False # 按列獲取系列數(shù)據(jù)
# 設(shè)置圖表位置
chart.LeftColumn = 1
chart.TopRow = 8
chart.RightColumn = 10
chart.BottomRow = 25
# 設(shè)置圖表類型
chart.ChartType = ExcelChartType.ColumnClustered
chart.ChartTitle = "各地區(qū)產(chǎn)品銷售額對比"
chart.ChartTitleArea.IsBold = True
chart.ChartTitleArea.Size = 12
# 設(shè)置軸標(biāo)題
chart.PrimaryCategoryAxis.Title = "地區(qū)"
chart.PrimaryValueAxis.Title = "銷售額 (萬元)"
# 設(shè)置顏色與數(shù)據(jù)標(biāo)簽
for cs in chart.Series:
cs.Format.Options.IsVaryColor = True
cs.DataPoints.DefaultDataPoint.DataLabels.HasValue = True
wb.SaveToFile("SalesChart_Column.xlsx")
wb.Dispose()
print("柱狀圖創(chuàng)建完成:SalesChart_Column.xlsx")工作表預(yù)覽:

說明:
通過 chart.DataRange 指定數(shù)據(jù)區(qū)域,chart.ChartType 設(shè)置圖表類型,DataLabels 顯示每個數(shù)據(jù)點的數(shù)值,使圖表直觀易讀。
4. 創(chuàng)建折線圖:觀察銷售趨勢
折線圖適用于展示銷售趨勢或隨時間變化的數(shù)據(jù):
from spire.xls import Workbook, ExcelChartType
wb = Workbook()
wb.LoadFromFile("SalesData.xlsx")
sheet = wb.Worksheets[0]
chart_line = sheet.Charts.Add()
chart_line.DataRange = sheet.Range["A1:C7"]
chart_line.SeriesDataFromRange = False
chart_line.LeftColumn = 1
chart_line.TopRow = 9
chart_line.RightColumn = 9
chart_line.BottomRow = 29
chart_line.ChartType = ExcelChartType.Line
chart_line.ChartTitle = "銷售趨勢分析"
chart_line.ChartTitleArea.IsBold = True
chart_line.ChartTitleArea.Size = 12
chart_line.PrimaryCategoryAxis.Title = "地區(qū)"
chart_line.PrimaryValueAxis.Title = "銷售額 (萬元)"
wb.SaveToFile("SalesChart_Line.xlsx")
wb.Dispose()
print("折線圖創(chuàng)建完成:SalesChart_Line.xlsx")工作表預(yù)覽:

說明:
折線圖能清晰顯示不同地區(qū)產(chǎn)品的銷售變化趨勢,便于管理者快速發(fā)現(xiàn)數(shù)據(jù)波動。
5. 創(chuàng)建餅圖:展示產(chǎn)品銷售占比
餅圖適合展示各產(chǎn)品在總銷售中的占比:
from spire.xls import Workbook, ExcelChartType
wb = Workbook()
wb.LoadFromFile("SalesData.xlsx")
sheet = wb.Worksheets[0]
chart_pie = sheet.Charts.Add()
chart_pie.DataRange = sheet.Range["B2:C7"] # 產(chǎn)品與銷售額
chart_pie.SeriesDataFromRange = False
chart_pie.LeftColumn = 1
chart_pie.TopRow = 10
chart_pie.RightColumn = 8
chart_pie.BottomRow = 30
chart_pie.ChartType = ExcelChartType.Pie
chart_pie.ChartTitle = "產(chǎn)品銷售占比"
chart_pie.ChartTitleArea.IsBold = True
chart_pie.ChartTitleArea.Size = 12
# 顯示類別和百分比
chart_pie.Series[0].DataPoints.DefaultDataPoint.DataLabels.HasCategoryName = True
chart_pie.Series[0].DataPoints.DefaultDataPoint.DataLabels.HasPercentage = True
wb.SaveToFile("SalesChart_Pie.xlsx")
wb.Dispose()
print("餅圖創(chuàng)建完成:SalesChart_Pie.xlsx")工作表預(yù)覽:

說明:
餅圖直觀顯示不同產(chǎn)品在總銷售中的份額,便于分析主力產(chǎn)品和市場分布。
6. 創(chuàng)建氣泡圖:三維數(shù)據(jù)可視化
氣泡圖可同時展示三個維度,例如地區(qū)、產(chǎn)品銷售額及利潤率:
from spire.xls import Workbook, ExcelChartType
wb = Workbook()
wb.LoadFromFile("SalesData.xlsx")
sheet = wb.Worksheets[0]
# 增加利潤率列
profit_rates = [0.15, 0.12, 0.13, 0.10, 0.14, 0.11]
for i, rate in enumerate(profit_rates, start=2):
sheet.Range[i, 4].NumberValue = rate
sheet.Range[1, 4].Text = "利潤率"
chart_bubble = sheet.Charts.Add(ExcelChartType.Bubble)
chart_bubble.DataRange = sheet.Range["B1:D7"]
chart_bubble.SeriesDataFromRange = False
chart_bubble.Series[0].Bubbles = sheet.Range["D2:D7"] # 氣泡大小
chart_bubble.LeftColumn = 1
chart_bubble.TopRow = 10
chart_bubble.RightColumn = 11
chart_bubble.BottomRow = 29
chart_bubble.ChartTitle = "銷售額與利潤率氣泡圖"
chart_bubble.ChartTitleArea.IsBold = True
chart_bubble.ChartTitleArea.Size = 12
wb.SaveToFile("SalesChart_Bubble.xlsx")
wb.Dispose()
print("氣泡圖創(chuàng)建完成:SalesChart_Bubble.xlsx")工作表預(yù)覽:

說明:
氣泡圖不僅展示銷售額,還通過氣泡大小體現(xiàn)利潤率,實現(xiàn)多維數(shù)據(jù)可視化。
7. 技術(shù)細(xì)節(jié)總結(jié)與關(guān)鍵類方法概覽
在前面的章節(jié)中,我們展示了如何使用 Free Spire.XLS for Python 創(chuàng)建柱狀圖、折線圖、餅圖和氣泡圖。從技術(shù)實現(xiàn)角度來看,圖表創(chuàng)建的核心流程可以總結(jié)為以下幾個關(guān)鍵步驟:
Python Excel 圖表創(chuàng)建步驟總結(jié)
- 準(zhǔn)備數(shù)據(jù)將業(yè)務(wù)數(shù)據(jù)寫入 Excel 工作表。數(shù)據(jù)格式和區(qū)域必須符合圖表要求,例如數(shù)值列用于 Y 軸,分類列用于 X 軸或類別。
- 添加圖表對象使用
sheet.Charts.Add()創(chuàng)建圖表對象,并通過chart.DataRange指定數(shù)據(jù)來源。 - 設(shè)置圖表類型與位置通過
chart.ChartType選擇圖表類型(如柱狀圖、折線圖、餅圖、氣泡圖),使用LeftColumn、TopRow、RightColumn、BottomRow精確定位圖表在工作表中的位置。 - 配置標(biāo)題與軸信息設(shè)置
chart.ChartTitle、PrimaryCategoryAxis.Title、PrimaryValueAxis.Title等屬性,為圖表和坐標(biāo)軸添加標(biāo)題,并可設(shè)置字體、大小和加粗。 - 美化圖表設(shè)置系列顏色
cs.Format.Fill.ForeColor、數(shù)據(jù)標(biāo)簽DataLabels.HasValue、圖例位置等,增強(qiáng)可讀性和視覺效果。 - 保存文件使用
wb.SaveToFile()將生成的圖表保存到指定文件。
關(guān)鍵類、方法與屬性
| 類 / 方法 / 屬性 | 說明 |
|---|---|
Workbook | Excel 工作簿對象,支持創(chuàng)建、加載和保存文件 |
Workbook.LoadFromFile() | 從本地文件加載 Excel 工作簿 |
Workbook.SaveToFile() | 保存 Excel 文件到指定路徑 |
Worksheet | 表示單個工作表,是操作數(shù)據(jù)和圖表的主體對象 |
sheet.Range[row, col] | 獲取或設(shè)置指定單元格的內(nèi)容 |
sheet.Charts.Add() | 在工作表中創(chuàng)建新的圖表對象 |
chart.DataRange | 指定圖表的數(shù)據(jù)源區(qū)域 |
chart.SeriesDataFromRange | 設(shè)置系列數(shù)據(jù)的方向(按行或按列) |
chart.ChartType | 設(shè)置圖表類型(柱狀圖、折線圖、餅圖、氣泡圖等) |
chart.ChartTitle | 設(shè)置圖表標(biāo)題文本 |
chart.PrimaryCategoryAxis.Title | 設(shè)置 X 軸標(biāo)題 |
chart.PrimaryValueAxis.Title | 設(shè)置 Y 軸標(biāo)題 |
通過理解上述關(guān)鍵類、方法和屬性,你可以靈活地創(chuàng)建各種類型的圖表,并根據(jù)業(yè)務(wù)需求進(jìn)行精細(xì)定制。掌握這些技術(shù)細(xì)節(jié),能讓你在實際項目中快速生成高質(zhì)量、可讀性強(qiáng)的 Excel 可視化報表,同時保持代碼簡潔和可維護(hù)性。
總結(jié)
本文以實際業(yè)務(wù)數(shù)據(jù)為例,展示了如何使用 Free Spire.XLS for Python 在 Excel 中創(chuàng)建柱狀圖、折線圖、餅圖和氣泡圖,實現(xiàn)數(shù)據(jù)的直觀可視化。通過編程方式生成圖表,不僅避免了手動操作的繁瑣和易錯問題,還能輕松應(yīng)對批量報告和復(fù)雜數(shù)據(jù)分析需求。
掌握這一技能后,你可以將數(shù)據(jù)分析與報告生成完全自動化,從而節(jié)省時間,提高效率,并為決策提供可靠的可視化支持。結(jié)合 Free Spire.XLS 的其他功能,如條件格式、數(shù)據(jù)驗證和公式操作,可以進(jìn)一步打造智能化的 Excel 自動化工作流,讓企業(yè)的數(shù)據(jù)價值發(fā)揮到最大。
以上就是使用Python在Excel工作表中創(chuàng)建圖表的實現(xiàn)步驟的詳細(xì)內(nèi)容,更多關(guān)于Python Excel創(chuàng)建圖表的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
一行Python代碼制作動態(tài)二維碼的實現(xiàn)
這篇文章主要介紹了一行Python代碼制作動態(tài)二維碼的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
詳解pyppeteer(python版puppeteer)基本使用
這篇文章主要介紹了詳解pyppeteer(python版puppeteer)基本使用 ,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
Python標(biāo)準(zhǔn)庫calendar的使用方法
本文主要介紹了Python標(biāo)準(zhǔn)庫calendar的使用方法,calendar模塊主要由Calendar類與一些模塊方法構(gòu)成,Calendar類又衍生了一些子孫類來幫助我們實現(xiàn)一些特殊的功能,感興趣的可以了解一下2021-11-11
使用OpenCV對車道進(jìn)行實時檢測的實現(xiàn)示例代碼
這篇文章主要介紹了使用OpenCV對車道進(jìn)行實時檢測的實現(xiàn)示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Django rest framework jwt的使用方法詳解
這篇文章主要介紹了Django rest framework jwt的使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-08-08
Python paramiko 模塊淺談與SSH主要功能模擬解析
這篇文章主要介紹了Python paramiko 模塊詳解與SSH主要功能模擬,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02

