Python數(shù)據(jù)可視化之在Excel中插入圖表
Python 操作 Excel 插入圖表:解鎖數(shù)據(jù)可視化的高效密碼
在數(shù)據(jù)分析與展示的領(lǐng)域中,Python 憑借其強(qiáng)大的庫(kù)支持,成為眾多開(kāi)發(fā)者與數(shù)據(jù)工作者的得力助手。將圖表嵌入 Excel 文件,不僅能豐富數(shù)據(jù)呈現(xiàn)形式,還能讓信息傳遞更加直觀高效。今天,就帶大家深入探索如何利用 Python 在 Excel 中插入圖表,實(shí)現(xiàn)數(shù)據(jù)可視化的進(jìn)階操作。
在實(shí)現(xiàn) Python 在 Excel 中插入圖表之前,需要確保安裝了以下關(guān)鍵庫(kù):
pandas :用于數(shù)據(jù)處理和分析,方便將數(shù)據(jù)組織成合適的數(shù)據(jù)結(jié)構(gòu)。
matplotlib :是 Python 經(jīng)典的繪圖庫(kù),負(fù)責(zé)生成各類(lèi)圖表,此示例中用于創(chuàng)建柱狀圖。
openpyxl :專(zhuān)注于操作 Excel 2010 及以上版本的.xlsx 文件,支持在 Excel 工作表中添加、修改和讀取數(shù)據(jù),以及插入圖表等操作。
Pillow :作為 Python Imaging Library(PIL)的一個(gè)友好分支,主要用于處理圖像相關(guān)的操作,在這里用于加載和調(diào)整圖表圖片。
以下是將柱狀圖插入 Excel 的完整代碼示例:
from openpyxl import load_workbook
from openpyxl.drawing.image import Image
import matplotlib.pyplot as plt
import pandas as pd
def insert_sheet_to_chart_bar(filename, df):
# 提取數(shù)據(jù) [{'A會(huì)員數(shù)量': 1783, 'B會(huì)員數(shù)量': 648}]
categories = list(df.columns)
values = list(df.values.flatten().tolist())
# 生成柱狀圖
plt.figure(figsize=(8, 4))
bars = plt.bar(categories, values, color=['#1f77b4', '#ff7f0e'])
# 設(shè)置中文顯示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.title("會(huì)員數(shù)量對(duì)比")
plt.ylabel("數(shù)量")
# 添加數(shù)值標(biāo)簽
for bar in bars:
height = bar.get_height()
plt.text(bar.get_x() + bar.get_width() / 2., height,
f'{int(height)}',
ha='center', va='bottom')
# 保存圖表圖片
chart_path = 'membership_chart.png'
plt.savefig(chart_path, dpi=300, bbox_inches='tight')
plt.close()
# 創(chuàng)建Excel并插入圖表
wb = Workbook()
ws = wb.active
# 插入圖表圖片
img = Image(chart_path)
img.width = 1000 # 調(diào)整寬度
img.height = 550 # 調(diào)整高度
ws.add_image(img, 'D2') # 插入到 D2 單元格位置
wb.save(filename)
代碼說(shuō)明 :
- 該函數(shù) insert_sheet_to_chart_bar 接收兩個(gè)參數(shù),filename 表示需要插入圖表的 Excel 文件路徑,df 是包含數(shù)據(jù)的 pandas DataFrame 對(duì)象。
- 通過(guò)提取 DataFrame 的列名作為柱狀圖的類(lèi)別(categories),將數(shù)據(jù)值展平并轉(zhuǎn)換為列表作為柱狀圖的高度(values)。
- 使用 matplotlib 創(chuàng)建柱狀圖,設(shè)置圖表標(biāo)題、坐標(biāo)軸標(biāo)簽,并添加數(shù)值標(biāo)簽以增強(qiáng)圖表的可讀性。然后將生成的圖表保存為圖片文件。
- 利用 openpyxl 加載目標(biāo) Excel 文件,獲取指定的工作表,通過(guò) Image 類(lèi)加載圖表圖片,并設(shè)置合適的寬度和高度,最終將圖片插入到指定的單元格位置,并保存修改后的 Excel 文件。
在實(shí)際應(yīng)用中,若要插入其他類(lèi)型的圖表,如折線圖、餅圖等,可對(duì) matplotlib 的繪圖方法和參數(shù)進(jìn)行相應(yīng)調(diào)整。此外,還需注意以下幾點(diǎn):
確保 Excel 文件路徑正確,且文件在讀取和保存過(guò)程中沒(méi)有被其他程序占用。
根據(jù)實(shí)際數(shù)據(jù)規(guī)模和需求,合理調(diào)整圖表尺寸和圖片分辨率,以確保圖表在 Excel 中的顯示效果清晰、美觀。若圖片尺寸過(guò)大或過(guò)小,可能會(huì)影響整體布局和可讀性。
當(dāng)數(shù)據(jù)中包含中文字符時(shí),設(shè)置字體為 SimHei(黑體)可以有效避免中文顯示亂碼的問(wèn)題,但不同系統(tǒng)環(huán)境下字體的安裝和配置可能存在差異,需確保系統(tǒng)中已安裝相應(yīng)的字體。
掌握 Python 在 Excel 中插入圖表的技能,能夠?yàn)閿?shù)據(jù)分析報(bào)告的制作、業(yè)務(wù)數(shù)據(jù)的可視化展示等工作帶來(lái)極大的便利和效率提升,助力大家在數(shù)據(jù)處理與展示領(lǐng)域更加游刃有余。
進(jìn)階:精準(zhǔn)插入圖表到指定 Excel 工作表
在處理數(shù)據(jù)的過(guò)程中,我們常常需要將生成的圖表精準(zhǔn)地插入到已存在數(shù)據(jù)的 Excel 文件的指定工作表中。借助 Python 的強(qiáng)大庫(kù)組合,這一操作得以高效實(shí)現(xiàn)。以下是經(jīng)過(guò)優(yōu)化和注釋補(bǔ)充的代碼,助你輕松完成這一任務(wù)。
from openpyxl import load_workbook
from openpyxl.drawing.image import Image
import matplotlib.pyplot as plt
import pandas as pd
def insert_sheet_to_chart_bar(filename, df, sheet_name):
"""
將柱狀圖插入到指定的 Excel 工作表中
參數(shù):
filename -- Excel 文件路徑
df -- 包含圖表數(shù)據(jù)的 pandas DataFrame 對(duì)象
sheet_name -- 目標(biāo)工作表名稱
"""
# 提取數(shù)據(jù):從 DataFrame 中獲取列名和數(shù)據(jù)值
categories = list(df.columns) # 獲取列名作為柱狀圖分類(lèi)標(biāo)簽
values = list(df.values.flatten().tolist()) # 將數(shù)據(jù)展平并轉(zhuǎn)換為列表形式
# 生成柱狀圖
plt.figure(figsize=(8, 4))
bars = plt.bar(categories, values, color=['#1f77b4', '#ff7f0e'])
# 設(shè)置中文顯示:指定字體以確保中文標(biāo)題和標(biāo)簽顯示正確
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.title("會(huì)員數(shù)量對(duì)比") # 設(shè)置圖表標(biāo)題
plt.ylabel("數(shù)量") # 設(shè)置縱軸標(biāo)簽
# 添加數(shù)值標(biāo)簽:在每個(gè)柱子上方顯示具體數(shù)值
for bar in bars:
height = bar.get_height()
plt.text(bar.get_x() + bar.get_width() / 2., height,
f'{int(height)}',
ha='center', va='bottom')
# 保存圖表圖片:將生成的圖表保存為 PNG 格式
chart_path = 'membership_chart.png'
plt.savefig(chart_path, dpi=300, bbox_inches='tight')
plt.close()
# 讀取 Excel 文件:加載已存在的 Excel 文件以便進(jìn)行修改
wb = load_workbook(filename)
# 獲取指定工作表:確保圖表插入到正確的工作表中
if sheet_name in wb.sheetnames:
ws = wb[sheet_name]
else:
ws = wb.create_sheet(sheet_name) # 如果工作表不存在,則創(chuàng)建
# 插入圖表圖片:加載圖表圖片并調(diào)整大小,然后插入到指定位置
img = Image(chart_path)
img.width = 1000 # 設(shè)置圖片寬度
img.height = 550 # 設(shè)置圖片高度
ws.add_image(img, 'D2') # 將圖片插入到 D2 單元格位置
# 保存修改后的 Excel 文件:確保所有更改被保存
wb.save(filename)
代碼應(yīng)用實(shí)例
假設(shè)有一個(gè)名為 data.xlsx 的 Excel 文件,其中包含一個(gè)名為 Sheet1 的工作表,該工作表中有兩列數(shù)據(jù)(例如:A 列是月份,B 列是銷(xiāo)售額)。我們可以通過(guò)以下代碼將柱狀圖插入到 Sheet1 中:
# 導(dǎo)入 pandas 庫(kù)
import pandas as pd
# 創(chuàng)建示例 DataFrame
data = {'月份': ['1月', '2月', '3月'], '銷(xiāo)售額': [2500, 3200, 2800]}
df = pd.DataFrame(data)
# 直接讀取指定sheet下的數(shù)據(jù)
# 指定要讀取的工作表名稱
sheet_name = 'Sheet1'
df = pd.read_excel('data.xlsx', sheet_name=sheet_name)
print(df)
# 調(diào)用函數(shù)
insert_sheet_to_chart_bar('data.xlsx', df, 'Sheet1')
關(guān)鍵點(diǎn)總結(jié)
精確指定工作表 :通過(guò)傳遞 sheet_name 參數(shù),可以確保圖表插入到正確的 Excel 工作表中。如果工作表不存在,代碼會(huì)自動(dòng)創(chuàng)建該工作表。
圖表生成與保存 :使用 matplotlib 庫(kù)生成柱狀圖,并保存為圖片文件。在生成圖表時(shí),可以根據(jù)實(shí)際需求設(shè)置圖表的標(biāo)題、坐標(biāo)軸標(biāo)簽、顏色、數(shù)值標(biāo)簽等屬性。
圖片插入與調(diào)整 :利用 openpyxl 庫(kù)加載保存的圖片,調(diào)整圖片的寬度和高度,使其在 Excel 中顯示時(shí)具有合適的大小,并將其插入到指定的單元格位置。
靈活性與可擴(kuò)展性 :此代碼結(jié)構(gòu)清晰,易于根據(jù)具體需求進(jìn)行修改和擴(kuò)展。例如,可以輕松調(diào)整圖表類(lèi)型、樣式,或者更改圖片的插入位置和大小等。
到此這篇關(guān)于Python數(shù)據(jù)可視化之在Excel中插入圖表的文章就介紹到這了,更多相關(guān)Python Excel插入圖表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于Python中 循環(huán)器 itertools的介紹
循環(huán)器是對(duì)象的容器,包含有多個(gè)對(duì)象。通過(guò)調(diào)用循環(huán)器的next()方法 (__next__()方法,在Python 3.x中),循環(huán)器將依次返回一個(gè)對(duì)象。直到所有的對(duì)象遍歷窮盡,循環(huán)器將舉出StopIteration錯(cuò)誤。這篇文章將對(duì)此做一個(gè)詳細(xì)介紹,感興趣的小伙伴請(qǐng)參考下面文字內(nèi)容2021-09-09
python中使用pymssql庫(kù)操作MSSQL數(shù)據(jù)庫(kù)
這篇文章主要給大家介紹了關(guān)于python中使用pymssql庫(kù)操作MSSQL數(shù)據(jù)庫(kù)的相關(guān)資料,最近在學(xué)習(xí)python,發(fā)現(xiàn)好像沒(méi)有對(duì)pymssql的詳細(xì)說(shuō)明,于是乎把官方文檔學(xué)習(xí)一遍,重要部分做個(gè)歸檔,方便以后查閱,需要的朋友可以參考下2023-08-08
python的xpath獲取div標(biāo)簽內(nèi)html內(nèi)容,實(shí)現(xiàn)innerhtml功能的方法
今天小編就為大家分享一篇python的xpath獲取div標(biāo)簽內(nèi)html內(nèi)容,實(shí)現(xiàn)innerhtml功能的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
Python嵌套列表轉(zhuǎn)一維的方法(壓平嵌套列表)
今天小編就為大家分享一篇Python嵌套列表轉(zhuǎn)一維的方法(壓平嵌套列表),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
Python實(shí)現(xiàn)將Excel內(nèi)容插入到Word模版中
前段時(shí)間因?yàn)樾枰幚硪淮蠖羊?yàn)收單,都是一些簡(jiǎn)單的復(fù)制粘貼替換工作,于是就想到用python進(jìn)行處理。本文分享了用python將excel文件單元格內(nèi)容插入到word模版中并保存為新文件的辦法,希望對(duì)大家有所幫助2023-03-03
對(duì)DataFrame數(shù)據(jù)中的重復(fù)行,利用groupby累加合并的方法詳解
今天小編就為大家分享一篇對(duì)DataFrame數(shù)據(jù)中的重復(fù)行,利用groupby累加合并的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
異步任務(wù)隊(duì)列Celery在Django中的使用方法
對(duì)于網(wǎng)站來(lái)說(shuō),給用戶一個(gè)較好的體驗(yàn)是很重要的事情,其中最重要的指標(biāo)就是網(wǎng)站的瀏覽速度。因此服務(wù)端要從各個(gè)方面對(duì)網(wǎng)站性能進(jìn)行優(yōu)化,這篇文章主要介紹了異步任務(wù)隊(duì)列Celery在Django中的使用方法,感興趣的小伙伴們可以參考一下2018-06-06

