Matplotlib實(shí)戰(zhàn)之百分比柱狀圖繪制詳解
百分比堆疊式柱狀圖是一種特殊的柱狀圖,它的每根柱子是等長(zhǎng)的,總額為100%。
柱子內(nèi)部被分割為多個(gè)部分,高度由該部分占總體的百分比決定。
百分比堆疊式柱狀圖不顯示數(shù)據(jù)的“絕對(duì)數(shù)值”,而是顯示“相對(duì)比例”。
但同時(shí),它也仍然具有柱狀圖的固有功能,即“比較”——我們可以通過(guò)比較多個(gè)柱子的構(gòu)成,分析數(shù)值之間的相對(duì)差異,或者得出數(shù)值變化的趨勢(shì)。
1. 主要元素
百分比柱狀圖是一種用于可視化比較不同類(lèi)別或組的百分比或比例的圖表。
它的主要元素包括:
- 橫軸:表示數(shù)據(jù)的主分類(lèi)。
- 縱軸:每個(gè)子分類(lèi)的比例關(guān)系。
- 堆疊的矩形:每個(gè)柱狀圖由多個(gè)堆疊部分組成,和堆疊柱狀圖不同的是,每個(gè)柱子都是一樣高的。
- 圖例:每個(gè)堆疊部分代表的意義。

2. 適用的場(chǎng)景
百分比柱狀圖適用的場(chǎng)景很多,比如:
- 市場(chǎng)份額:比較不同產(chǎn)品或服務(wù)的市場(chǎng)份額,幫助決策者了解市場(chǎng)競(jìng)爭(zhēng)情況。
- 人口比例:顯示不同地區(qū)或不同群體的人口比例,或不同年齡段的人口比例。
- 問(wèn)卷調(diào)查結(jié)果:比較不同選項(xiàng)或答案的頻率或比例,或者用戶(hù)對(duì)產(chǎn)品特性的滿(mǎn)意度。
- 部門(mén)預(yù)算分配:顯示不同部門(mén)或項(xiàng)目的預(yù)算分配比例,幫助管理者了解資源分配情況。
- 等等。。。
3. 不適用的場(chǎng)景
百分比柱狀圖也有不適用于的場(chǎng)景,比如:
- 比較絕對(duì)數(shù)值:如果需要比較具體的數(shù)值大小而不僅僅是比例,那么百分比柱狀圖可能不是最合適的選擇。
- 數(shù)據(jù)存在重疊:如果不同類(lèi)別的數(shù)據(jù)存在重疊或者相互依賴(lài)的情況,百分比柱狀圖可能無(wú)法清晰地展示比例關(guān)系。
- 數(shù)據(jù)量過(guò)大或過(guò)小:如果數(shù)據(jù)量過(guò)大或過(guò)小,百分比柱狀圖可能無(wú)法有效地顯示比例關(guān)系。
4. 分析實(shí)戰(zhàn)
和上一篇堆疊柱狀圖使用相同的原始數(shù)據(jù),繪制圖形之后可以看看這兩種柱狀圖展示分析結(jié)果的區(qū)別。
4.1. 數(shù)據(jù)來(lái)源
數(shù)據(jù)來(lái)自國(guó)家統(tǒng)計(jì)局公開(kāi)的人民生活數(shù)據(jù),可從下面的網(wǎng)址下載:databook.top/nation/A0A
使用的是其中 A0A0A.csv文件(全國(guó)居民主要食品消費(fèi)量)
fp = "d:/share/A0A0A.csv" df = pd.read_csv(fp) df

4.2. 數(shù)據(jù)清理
選取和上一篇堆疊柱狀圖一樣,還是5類(lèi):
- 居民人均蔬菜及食用菌消費(fèi)量(千克)
- 居民人均肉類(lèi)消費(fèi)量(千克)
- 居民人均禽類(lèi)消費(fèi)量(千克)
- 居民人均水產(chǎn)品消費(fèi)量(千克)
- 居民人均蛋類(lèi)消費(fèi)量(千克)
和堆疊柱狀圖不同的是,繪制百分比柱狀圖用的是百分比數(shù)值,所有要把原始數(shù)據(jù)中每年的絕對(duì)數(shù)值轉(zhuǎn)換為百分比數(shù)值。
data = df[(df["sj"] >= 2013) &
(df["sj"] <= 2021) &
(df["zb"].isin(["A0A0A03",
"A0A0A04",
"A0A0A05",
"A0A0A06",
"A0A0A07"]))].copy()
data["年消耗總量"] = data.groupby("sj").value.transform("sum")
data["各類(lèi)消耗量占比"] = data["value"] / data["年消耗總量"]
data.loc[:, ["sjCN", "zbCN", "各類(lèi)消耗量占比"]].head(10)
4.3. 分析結(jié)果可視化
import matplotlib.ticker as mticker
data = data.sort_values("sj")
data["各類(lèi)消耗量占比"] = data["各類(lèi)消耗量占比"]*100
with plt.style.context("seaborn-v0_8"):
fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
years = data["sjCN"].drop_duplicates(keep="first").tolist()
bar_data = {
"蔬菜及菌類(lèi)(%)": data[data["zb"] == "A0A0A03"]["各類(lèi)消耗量占比"].tolist(),
"肉類(lèi)(%)": data[data["zb"] == "A0A0A04"]["各類(lèi)消耗量占比"].tolist(),
"禽類(lèi)(%)": data[data["zb"] == "A0A0A05"]["各類(lèi)消耗量占比"].tolist(),
"水產(chǎn)品(%)": data[data["zb"] == "A0A0A06"]["各類(lèi)消耗量占比"].tolist(),
"蛋類(lèi)(%)": data[data["zb"] == "A0A0A07"]["各類(lèi)消耗量占比"].tolist(),
}
bottom = np.zeros(len(years))
for key, vals in bar_data.items():
ax.bar(years, vals, label=key, bottom=bottom)
bottom += vals
# 設(shè)置Y軸刻度的顯示格式
ax.set_ylim(0, 110)
yticks = ax.get_yticks().tolist()
ax.yaxis.set_major_locator(mticker.FixedLocator(yticks))
ax.set_yticklabels(["{}%".format(x) for x in yticks])
ax.set_title("全國(guó)居民主要糧食消耗情況")
ax.legend(loc="upper left", ncol=5)
百分比柱狀圖每年的數(shù)據(jù)高度都一樣,與堆疊柱狀圖相比,更容易比較每個(gè)種類(lèi)糧食的消耗情況。
不過(guò),這種圖看不出糧食總量的變化情況了。
到此這篇關(guān)于Matplotlib實(shí)戰(zhàn)之百分比柱狀圖繪制詳解的文章就介紹到這了,更多相關(guān)Matplotlib百分比柱狀圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python讀取圖片屬性信息的實(shí)現(xiàn)方法
這篇文章介紹了利用Python讀取圖片屬性信息的方法,讀取的內(nèi)容包括GPS 信息、圖片分辨率、圖片像素、設(shè)備商、拍攝設(shè)備等,有需要的朋友們可以參考借鑒。2016-09-09
python抓取網(wǎng)頁(yè)內(nèi)容示例分享
這篇文章主要介紹了python抓取網(wǎng)頁(yè)內(nèi)容示例,在抓取的時(shí)候?qū)τ趃bk編碼網(wǎng)頁(yè)還需要轉(zhuǎn)化一下,具體看下面的示例吧2014-02-02
Python人工智能之混合高斯模型運(yùn)動(dòng)目標(biāo)檢測(cè)詳解分析
運(yùn)動(dòng)目標(biāo)檢測(cè)是計(jì)算機(jī)視覺(jué)領(lǐng)域中的一個(gè)重要內(nèi)容,其檢測(cè)效果將會(huì)對(duì)目標(biāo)跟蹤與識(shí)別造成一定的影響,本文將介紹用Python來(lái)進(jìn)行混合高斯模型運(yùn)動(dòng)目標(biāo)檢測(cè),感興趣的朋友快來(lái)看看吧2021-11-11
Python循環(huán)結(jié)構(gòu)的應(yīng)用場(chǎng)景詳解
這篇文章主要介紹了Python循環(huán)結(jié)構(gòu)的應(yīng)用場(chǎng)景詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
詳解python實(shí)現(xiàn)線程安全的單例模式
這篇文章主要介紹了python實(shí)現(xiàn)線程安全的單例模式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
Python項(xiàng)目中5個(gè)Enum枚舉巧妙操作詳解
這篇文章主要為大家詳細(xì)介紹了Python項(xiàng)目中5個(gè)Enum枚舉巧妙操作,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以了解下2025-10-10
Python利用PySimpleGUI實(shí)現(xiàn)自制桌面翻譯神器
工作上經(jīng)常需要與外國(guó)友人郵件溝通,奈何工作電腦沒(méi)有安裝有道詞典一類(lèi)的翻譯軟件,結(jié)合自己的需要,自己用PySimpleGUI擼一個(gè)桌面翻譯神器,感興趣的可以了解一下2022-09-09
Python基于回溯法子集樹(shù)模板解決數(shù)字組合問(wèn)題實(shí)例
這篇文章主要介紹了Python基于回溯法子集樹(shù)模板解決數(shù)字組合問(wèn)題,簡(jiǎn)單描述了數(shù)字組合問(wèn)題并結(jié)合實(shí)例形式分析了Python回溯法子集樹(shù)模板解決數(shù)字組合問(wèn)題的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-09-09

