Python使用Matplotlib模塊的pie()函數(shù)實(shí)現(xiàn)繪制餅形圖
1 模塊安裝
- 先安裝
matplotlib
:
pip install matplotlib
- 安裝
numpy
模塊,安裝matplotlib
時(shí)候就已經(jīng)安裝這個(gè)依賴了,所以不用裝了,當(dāng)然也可以獨(dú)立安裝:
- 安裝
pandas
:
pip install numpy
2 實(shí)現(xiàn)思路
- 數(shù)據(jù)存放在
excel
中,對(duì)指定數(shù)據(jù)進(jìn)行分析,所以需要用到pandas
; - 對(duì)指定數(shù)據(jù)分析后繪制餅形圖,需要用到
Matplotlib
模塊的pie()
函數(shù); - 對(duì)以下指定
excel
內(nèi)容進(jìn)行分析; - 分析用戶購(gòu)買區(qū)域情況占比,以下數(shù)據(jù)僅為參考,無真實(shí)意義,把以下內(nèi)容保存為
data.xlsx
:
用戶 金額 地址 user001 130.22 重慶 user002 55.64 江蘇省 user003 33 江蘇省 user004 158.23 重慶 user005 124.56 安徽省 user006 33.26 山東省 user007 59.9 吉林省 user008 34.9 福建省 user009 45.36 山西省 user010 35.23 河南省 user011 123.25 廣東省 user012 44.25 河北省 user013 58.26 廣東省 user014 83.79 貴州省 user015 59.99 廣東省 user016 63.12 福建省 user017 110.78 湖北省 user018 120.21 上海 user019 42.59 山東省 user020 78.99 山西省 user021 1150 浙江省 user022 66 廣東省 user023 1256 安徽省 user024 36.3 廣東省 user025 54.89 廣東省 user026 164.89 廣東省 user027 45.78 廣東省 user028 126.45 廣東省 user029 47.35 河南省 user030 135.79 廣東省 user031 159.23 廣東省 user032 61.45 廣東省 user033 110.41 廣東省 user034 298.12 江蘇省 user035 102.23 云南省 user036 70.59 上海 user037 159.87 廣東省 user038 143.21 浙江省 user039 89.9 廣東省 user040 49.9 浙江省 user041 52.3 山東省 user042 89.4 江西省 user043 59.21 北京 user044 37.77 廣東省 user045 33.29 廣東省 user046 36.19 貴州省 user047 159.9 福建省 user048 49.9 四川省 user049 45.6 廣東省 user050 149.8 廣東省
3 pie()函數(shù)說明
- 實(shí)現(xiàn)這個(gè)功能,主要使用了
matplotlib
中pyplot
里的pie()
函數(shù); pie()
函數(shù)部分源碼:
# Autogenerated by boilerplate.py. Do not edit as changes will be lost. @_copy_docstring_and_deprecators(Axes.pie) def pie( x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False, *, normalize=None, data=None): return gca().pie( x, explode=explode, labels=labels, colors=colors, autopct=autopct, pctdistance=pctdistance, shadow=shadow, labeldistance=labeldistance, startangle=startangle, radius=radius, counterclock=counterclock, wedgeprops=wedgeprops, textprops=textprops, center=center, frame=frame, rotatelabels=rotatelabels, normalize=normalize, **({"data": data} if data is not None else {}))
- 參數(shù)說明:
參數(shù) | 說明 |
---|---|
x | 繪圖數(shù)據(jù) |
explode | 指定餅形圖突出顯示的部分 |
labels | 餅形圖標(biāo)簽說明 |
colors | 餅形圖的填充色 |
autopct | 自動(dòng)添加百分比顯示 |
pctdistance | 設(shè)置百分比標(biāo)簽與圓心的距離 |
shadow | 是否添加餅形圖的陰影效果 |
labeldistance | 設(shè)置各扇形標(biāo)簽與圓心的距離 |
startangle | 設(shè)置餅形圖的初始擺放角度 |
radius | 設(shè)置餅圖的半徑 |
counterclock | 是否讓餅圖逆時(shí)針顯示 |
wedgeprops | 設(shè)置餅圖內(nèi)外邊界的屬性,如邊界線粗細(xì)和顏色 |
textprops | 設(shè)置餅圖文本屬性,如字體大小和顏色 |
center | 餅圖的中心點(diǎn)位置,默認(rèn)原點(diǎn) |
frame | 是否顯示餅形圖后的圖框 |
4 實(shí)現(xiàn)過程
4.1 導(dǎo)入包
import pandas as pd from matplotlib import pyplot as plt
4.2 定義一個(gè)類
- 為了代碼整潔和可讀性,我們定義過一個(gè)類
TestPie():
- 類初始化:
class TestPie(): def __init__(self): super(TestPie, self).__init__()
4.3 讀取數(shù)據(jù)并處理
# 讀取數(shù)據(jù) self.data_path = './data.xlsx' self.data_content = pd.DataFrame(pd.read_excel(self.data_path)) # 獲取地址信息 self.address = self.data_content['地址'] self.data_content['省'] = self.address # 獲取序號(hào)/地址/金額信息 self.content = self.data_content.groupby(['省'], as_index=False)["金額"].sum().reset_index() # print(self.content) # 降序排序 self.content01 = self.content.sort_values(['金額'], ascending=False) self.content02 = self.content01.head(5) # 讀取前5行
4.4 定義餅圖繪制方法
- 定義方法:
def test_pic(self): """餅形圖"""
- 解決中文亂碼問題:
# 解決中文亂碼 plt.rcParams['font.sans-serif'] = ['SimHei']
- 設(shè)置餅圖大?。?/li>
# 調(diào)節(jié)圖形大小 plt.figure(figsize=(3, 6))
- 定義標(biāo)簽:
labels = self.content02['省'].values.tolist()
- 設(shè)置餅形圖每塊的值:
sizes = self.content02['金額'].values.tolist()
- 設(shè)置餅形圖每塊的顏色:
colors = ['cyan','darkorange','lawngreen','pink','gold']
- 餅圖繪制:
patches, l_text, p_text = plt.pie(sizes, labels=labels, colors=colors, labeldistance=1, autopct='%.1f%%', startangle=90, radius=0.5, center=(0.3, 0.3), textprops={'fontsize': 8, 'color': 'k'}, pctdistance=0.7)
- 設(shè)置圖例,標(biāo)題等:
# 設(shè)置x,y軸刻度一致,這樣餅圖才能是圓的 plt.axis('equal') plt.legend(loc='lower left', bbox_to_anchor=(-0.1, 0.8)) plt.title('購(gòu)買力分析')
5 完整源碼
# -*- coding:utf-8 -*- # 作者:蟲無涯 # 日期:2023/11/15 # 文件名稱:test_pie.py # 作用:Matplotlib模塊的pie()函數(shù)繪制餅形圖 # 聯(lián)系:VX(NoamaNelson) # 博客:https://blog.csdn.net/NoamaNelson import pandas as pd from matplotlib import pyplot as plt class TestPie(): def __init__(self): super(TestPie, self).__init__() # 讀取數(shù)據(jù) self.data_path = './data.xlsx' self.data_content = pd.DataFrame(pd.read_excel(self.data_path)) # 獲取地址信息 self.address = self.data_content['地址'] self.data_content['省'] = self.address # 獲取序號(hào)/地址/金額信息 self.content = self.data_content.groupby(['省'], as_index=False)["金額"].sum().reset_index() # print(self.content) # 降序排序 self.content01 = self.content.sort_values(['金額'], ascending=False) self.content02 = self.content01.head(5) # 讀取前5行 def test_pic(self): """餅形圖""" # 解決中文亂碼 plt.rcParams['font.sans-serif'] = ['SimHei'] # 調(diào)節(jié)圖形大小 plt.figure(figsize=(3, 6)) # 定義標(biāo)簽 labels = self.content02['省'].values.tolist() # 設(shè)置餅形圖每塊的值 sizes = self.content02['金額'].values.tolist() # 設(shè)置餅形圖每塊的顏色 colors = ['cyan', 'darkorange', 'lawngreen', 'pink', 'gold'] patches, l_text, p_text = plt.pie(sizes, labels=labels, colors=colors, labeldistance=1, autopct='%.1f%%', startangle=90, radius=0.5, center=(0.3, 0.3), textprops={'fontsize': 8, 'color': 'k'}, pctdistance=0.7) plt.axis('equal') # 顯示圖例 plt.legend(loc='lower left', bbox_to_anchor=(-0.1, 0.8) # 添加圖標(biāo)題 plt.title('購(gòu)買力分析') plt.grid() plt.show() if __name__ == "__main__": result = TestPie() result.test_pic()
效果顯示:
以上就是Python使用Matplotlib模塊的pie()函數(shù)實(shí)現(xiàn)繪制餅形圖的詳細(xì)內(nèi)容,更多關(guān)于Python Matplotlib餅形圖的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python使用opencv resize圖像不進(jìn)行插值的操作
這篇文章主要介紹了python使用opencv resize圖像不進(jìn)行插值的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-07-07Python?對(duì)象拷貝及深淺拷貝區(qū)別的詳細(xì)教程示例
這篇文章主要介紹了Python?對(duì)象拷貝及深淺拷貝區(qū)別的詳細(xì)教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03基于python實(shí)現(xiàn)模擬數(shù)據(jù)結(jié)構(gòu)模型
這篇文章主要介紹了基于python實(shí)現(xiàn)模擬數(shù)據(jù)結(jié)構(gòu)模型,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06python基礎(chǔ)篇之pandas常用基本函數(shù)匯總
Pandas是一個(gè)python數(shù)據(jù)分析庫(kù),它提供了許多函數(shù)和方法來加快數(shù)據(jù)分析過程,下面這篇文章主要給大家介紹了關(guān)于python基礎(chǔ)篇之pandas常用基本函數(shù)的相關(guān)資料,需要的朋友可以參考下2022-07-07利用Python實(shí)現(xiàn)崗位的分析報(bào)告
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)崗位的分析報(bào)告,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-03-03使用Python簡(jiǎn)單編寫一個(gè)股票監(jiān)控系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了如何使用Python簡(jiǎn)單編寫一個(gè)股票監(jiān)控系統(tǒng),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-12-12使用python把json文件轉(zhuǎn)換為csv文件
這篇文章主要介紹了使用python把json文件轉(zhuǎn)換為csv文件,幫助大家更好的利用python處理數(shù)據(jù),感興趣的朋友可以了解下2021-03-03Python基礎(chǔ)之操作MySQL數(shù)據(jù)庫(kù)
這篇文章主要介紹了Python基礎(chǔ)之操作MySQL數(shù)據(jù)庫(kù),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-05-05Python根據(jù)Excel表進(jìn)行文件重命名的實(shí)現(xiàn)示例
在日常辦公過程中,批量重命名是經(jīng)常使用的操作,本文主要介紹了Python根據(jù)Excel表進(jìn)行文件重命名,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01