Matplotlib實(shí)戰(zhàn)之百分比柱狀圖繪制詳解
百分比堆疊式柱狀圖是一種特殊的柱狀圖,它的每根柱子是等長(zhǎng)的,總額為100%。
柱子內(nèi)部被分割為多個(gè)部分,高度由該部分占總體的百分比決定。
百分比堆疊式柱狀圖不顯示數(shù)據(jù)的“絕對(duì)數(shù)值”,而是顯示“相對(duì)比例”。
但同時(shí),它也仍然具有柱狀圖的固有功能,即“比較”——我們可以通過比較多個(gè)柱子的構(gòu)成,分析數(shù)值之間的相對(duì)差異,或者得出數(shù)值變化的趨勢(shì)。
1. 主要元素
百分比柱狀圖是一種用于可視化比較不同類別或組的百分比或比例的圖表。
它的主要元素包括:
- 橫軸:表示數(shù)據(jù)的主分類。
- 縱軸:每個(gè)子分類的比例關(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ū)或不同群體的人口比例,或不同年齡段的人口比例。
- 問卷調(diào)查結(jié)果:比較不同選項(xiàng)或答案的頻率或比例,或者用戶對(duì)產(chǎn)品特性的滿意度。
- 部門預(yù)算分配:顯示不同部門或項(xiàng)目的預(yù)算分配比例,幫助管理者了解資源分配情況。
- 等等。。。
3. 不適用的場(chǎng)景
百分比柱狀圖也有不適用于的場(chǎng)景,比如:
- 比較絕對(duì)數(shù)值:如果需要比較具體的數(shù)值大小而不僅僅是比例,那么百分比柱狀圖可能不是最合適的選擇。
- 數(shù)據(jù)存在重疊:如果不同類別的數(shù)據(jù)存在重疊或者相互依賴的情況,百分比柱狀圖可能無法清晰地展示比例關(guān)系。
- 數(shù)據(jù)量過大或過小:如果數(shù)據(jù)量過大或過小,百分比柱狀圖可能無法有效地顯示比例關(guān)系。
4. 分析實(shí)戰(zhàn)
和上一篇堆疊柱狀圖使用相同的原始數(shù)據(jù),繪制圖形之后可以看看這兩種柱狀圖展示分析結(jié)果的區(qū)別。
4.1. 數(shù)據(jù)來源
數(shù)據(jù)來自國(guó)家統(tǒng)計(jì)局公開的人民生活數(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類:
- 居民人均蔬菜及食用菌消費(fèi)量(千克)
- 居民人均肉類消費(fèi)量(千克)
- 居民人均禽類消費(fèi)量(千克)
- 居民人均水產(chǎn)品消費(fè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["各類消耗量占比"] = data["value"] / data["年消耗總量"] data.loc[:, ["sjCN", "zbCN", "各類消耗量占比"]].head(10)
4.3. 分析結(jié)果可視化
import matplotlib.ticker as mticker data = data.sort_values("sj") data["各類消耗量占比"] = data["各類消耗量占比"]*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 = { "蔬菜及菌類(%)": data[data["zb"] == "A0A0A03"]["各類消耗量占比"].tolist(), "肉類(%)": data[data["zb"] == "A0A0A04"]["各類消耗量占比"].tolist(), "禽類(%)": data[data["zb"] == "A0A0A05"]["各類消耗量占比"].tolist(), "水產(chǎn)品(%)": data[data["zb"] == "A0A0A06"]["各類消耗量占比"].tolist(), "蛋類(%)": data[data["zb"] == "A0A0A07"]["各類消耗量占比"].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è)種類糧食的消耗情況。
不過,這種圖看不出糧食總量的變化情況了。
到此這篇關(guān)于Matplotlib實(shí)戰(zhàn)之百分比柱狀圖繪制詳解的文章就介紹到這了,更多相關(guān)Matplotlib百分比柱狀圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入理解?Python?中的?pip?虛擬環(huán)境(最佳實(shí)踐)
本文深入講解了Python中pip虛擬環(huán)境的概念及其重要性,并詳細(xì)介紹了如何創(chuàng)建、激活和管理虛擬環(huán)境,以及如何使用requirements.txt文件記錄和管理項(xiàng)目依賴,文章指出,使用虛擬環(huán)境可以有效避免依賴沖突,為每個(gè)項(xiàng)目提供一個(gè)干凈的開發(fā)環(huán)境,使得項(xiàng)目更易于維護(hù)和部署2024-10-10Python中的文件和目錄操作實(shí)現(xiàn)代碼
對(duì)于文件和目錄的處理,雖然可以通過操作系統(tǒng)命令來完成,但是Python語言為了便于開發(fā)人員以編程的方式處理相關(guān)工作,提供了許多處理文件和目錄的內(nèi)置函數(shù)。重要的是,這些函數(shù)無論是在Unix、Windows還是Macintosh平臺(tái)上,它們的使用方式是完全一致的。2011-03-03Pycharm遠(yuǎn)程調(diào)試原理及具體配置詳解
這篇文章主要介紹了Pycharm遠(yuǎn)程調(diào)試原理及具體配置詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08Python如何自動(dòng)生成環(huán)境依賴包requirements
這篇文章主要介紹了Python如何自動(dòng)生成環(huán)境依賴包requirements問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04使用 Python 實(shí)現(xiàn)簡(jiǎn)單的 switch/case 語句的方法
這篇文章主要介紹了用 Python 實(shí)現(xiàn)簡(jiǎn)單的 switch/case 語句的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09Python程序中的觀察者模式結(jié)構(gòu)編寫示例
觀察者模式是最常用的設(shè)計(jì)模式之一,旨在觀察目標(biāo)和觀察者之間建立一個(gè)抽象的耦合,減少對(duì)象之間的耦合,這里我們就來看一下Python程序中的觀察者模式結(jié)構(gòu)編寫示例2016-05-05Python&&GDAL實(shí)現(xiàn)NDVI的計(jì)算方式
今天小編就為大家分享一篇Python&&GDAL實(shí)現(xiàn)NDVI的計(jì)算方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01