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