Matplotlib實(shí)戰(zhàn)之面積圖繪制詳解
面積圖,或稱區(qū)域圖,是一種隨有序變量的變化,反映數(shù)值變化的統(tǒng)計(jì)圖表。
面積圖也可用于多個(gè)系列數(shù)據(jù)的比較。
這時(shí),面積圖的外觀看上去類似層疊的山脈,在錯(cuò)落有致的外形下表達(dá)數(shù)據(jù)的總量和趨勢(shì)。
面積圖不僅可以清晰地反映出數(shù)據(jù)的趨勢(shì)變化,也能夠強(qiáng)調(diào)不同類別的數(shù)據(jù)間的差距對(duì)比。
面積圖的特點(diǎn)在于,折線與自變量坐標(biāo)軸之間的區(qū)域,會(huì)由顏色或者紋理填充。
但它的劣勢(shì)在于,填充會(huì)讓形狀互相遮蓋,反而看不清變化。一種解決方法,是使用有透明度的顏色,來(lái)“讓”出覆蓋區(qū)域。
1. 主要元素
面積圖是一種用于展示數(shù)據(jù)分布或密度的圖表類型,主要由數(shù)據(jù)點(diǎn)、面積、以及X軸和Y軸組成。
面積圖可以直觀地反映數(shù)據(jù)的分布情況。
面積圖的主要構(gòu)成元素包括:
- 數(shù)據(jù)點(diǎn):表示數(shù)據(jù)的具體位置和大小
- 面積:表示數(shù)據(jù)的分布或密度
- X軸:一般是有序變量,表示數(shù)據(jù)點(diǎn)的變化區(qū)間
- Y軸:數(shù)據(jù)點(diǎn)在不同時(shí)刻的值
2. 適用的場(chǎng)景
面積圖適用于以下分析場(chǎng)景:
- 數(shù)據(jù)分布分析:幫助分析人員了解數(shù)據(jù)的分布情況,如城市的大小、人口分布等。
- 市場(chǎng)需求分析:幫助企業(yè)了解市場(chǎng)需求的變化趨勢(shì),如銷售額的增長(zhǎng)情況等。
- 健康狀況分析:幫助醫(yī)生了解患者的健康狀況,如體溫、血壓等數(shù)據(jù)的變化趨勢(shì)。
3. 不適用的場(chǎng)景
面積圖不適用于以下分析場(chǎng)景:
- 數(shù)據(jù)的精確性要求較高的分析場(chǎng)景:面積圖無(wú)法精確地反映數(shù)據(jù)的分布情況,在需要精確數(shù)據(jù)的場(chǎng)景中不適用。
- 需要顯示數(shù)據(jù)細(xì)節(jié)的分析場(chǎng)景:面積圖無(wú)法直觀地顯示數(shù)據(jù)的細(xì)節(jié)和變化趨勢(shì),在需要顯示數(shù)據(jù)細(xì)節(jié)的場(chǎng)景中不適用。
- 需要進(jìn)行多維數(shù)據(jù)分析的場(chǎng)景:面積圖無(wú)法直接展示多維數(shù)據(jù),在需要進(jìn)行多維數(shù)據(jù)分析的場(chǎng)景中不適用。
4. 分析實(shí)戰(zhàn)
這次使用國(guó)內(nèi)生產(chǎn)總值相關(guān)數(shù)據(jù)來(lái)實(shí)戰(zhàn)面積圖的分析。
4.1. 數(shù)據(jù)來(lái)源
數(shù)據(jù)來(lái)源國(guó)家統(tǒng)計(jì)局公開(kāi)數(shù)據(jù),已經(jīng)整理好的csv文件在:databook.top/nation/A02
本次分析使用其中的 A0201.csv
文件(國(guó)內(nèi)生產(chǎn)總值數(shù)據(jù))。
下面的文件路徑 fp
要換成自己實(shí)際的文件路徑。
fp = "d:/share/A0201.csv" df = pd.read_csv(fp) df
4.2. 數(shù)據(jù)清理
從中過(guò)濾出國(guó)內(nèi)生產(chǎn)總值(億元)和人均國(guó)內(nèi)生產(chǎn)總值(元),然后繪制面積圖看看有什么發(fā)現(xiàn)。
key1 = "國(guó)民總收入(億元)" df[df["zbCN"]==key1].head()
key2 = "人均國(guó)內(nèi)生產(chǎn)總值(元)" df[df["zbCN"]==key2].head()
4.3. 分析結(jié)果可視化
**國(guó)內(nèi)生產(chǎn)總值(億元)**的面積圖:
from matplotlib.ticker import MultipleLocator with plt.style.context("seaborn-v0_8"): fig = plt.figure() ax = fig.add_axes([0.1, 0.1, 0.8, 0.8]) ax.xaxis.set_major_locator(MultipleLocator(4)) ax.xaxis.set_minor_locator(MultipleLocator(2)) data = df[df["zbCN"] == key1].copy() data["value"] = data["value"] / 10000 data = data.sort_values(by="sj") ax.fill_between(data["sjCN"], data["value"], label="國(guó)民總收入(萬(wàn)億元)") ax.legend(loc="upper left")
上面的代碼把Y軸的單位改成了萬(wàn)億元,原先的億元作為單位,數(shù)值太大。
用面積圖來(lái)展示分析結(jié)果,不像折線圖那樣,僅僅只是變化趨勢(shì)的感覺(jué);
通過(guò)折線下的面積不斷擴(kuò)大,會(huì)感覺(jué)到國(guó)民總收入的總量在不斷變大,且2006年之后,總量增速明顯提高。
同樣分析步驟,人均收入的面積圖如下:
from matplotlib.ticker import MultipleLocator with plt.style.context("seaborn-v0_8"): fig = plt.figure() ax = fig.add_axes([0.1, 0.1, 0.8, 0.8]) ax.xaxis.set_major_locator(MultipleLocator(4)) ax.xaxis.set_minor_locator(MultipleLocator(2)) data = df[df["zbCN"] == key2].copy() data = data.sort_values(by="sj") ax.fill_between(data["sjCN"], data["value"], label=key2) ax.legend(loc="upper left")
接下來(lái),我們把國(guó)民總收入和人均收入放在一起看,但是,這兩組數(shù)據(jù)的單位不一樣(一個(gè)是萬(wàn)億元,一個(gè)是元)。
所以要用到之前 matplotlib基礎(chǔ)系列中介紹的雙坐標(biāo)軸技巧來(lái)展示。
from matplotlib.ticker import MultipleLocator with plt.style.context("seaborn-v0_8"): fig = plt.figure() ax = fig.add_axes([0.1, 0.1, 0.8, 0.8]) ax.xaxis.set_major_locator(MultipleLocator(4)) ax.xaxis.set_minor_locator(MultipleLocator(2)) ax_twinx = ax.twinx() data = df[df["zbCN"] == key1].copy() data["value"] = data["value"] / 10000 data = data.sort_values(by="sj") ax.fill_between(data["sjCN"], data["value"], alpha=0.5, label="國(guó)民總收入(萬(wàn)億元)") data = df[df["zbCN"] == key2].copy() data = data.sort_values(by="sj") ax_twinx.fill_between(data["sjCN"], data["value"], color='r', alpha=0.2, label=key2) ax.legend(loc="upper left") ax_twinx.legend(loc="upper right")
兩個(gè)面積圖用了不同顏色,并加了透明度(即alpha
參數(shù)),不加透明度,顏色會(huì)互相覆蓋。
左邊的Y軸是國(guó)民總收入,右邊的Y軸是人均收入。
這兩個(gè)面積圖幾乎完全重合,正說(shuō)明了國(guó)民總收入和人均收入是強(qiáng)相關(guān)的。
以上就是Matplotlib實(shí)戰(zhàn)之面積圖繪制詳解的詳細(xì)內(nèi)容,更多關(guān)于Matplotlib面積圖的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python操作數(shù)據(jù)庫(kù)之?dāng)?shù)據(jù)庫(kù)編程接口
這篇文章主要介紹了Python操作數(shù)據(jù)庫(kù)之?dāng)?shù)據(jù)庫(kù)編程接口,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-06-06在Heroku云平臺(tái)上部署Python的Django框架的教程
這篇文章主要介紹了在Heroku云平臺(tái)上部署Python的Django框架的教程,Heroku云平臺(tái)使用了Git版本控制系統(tǒng),所以本教程主要提供了配置所需要的Git腳本,需要的朋友可以參考下2015-04-04python學(xué)習(xí)--使用QQ郵箱發(fā)送郵件代碼實(shí)例
這篇文章主要介紹了python使用QQ郵箱發(fā)送郵件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Python批量自動(dòng)修改文件名,按指定的格式自動(dòng)命名方式
這篇文章主要介紹了Python批量自動(dòng)修改文件名,按指定的格式自動(dòng)命名方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08python使用numpy尋找二維數(shù)組的最值及其下標(biāo)方法分析
這篇文章主要為大家介紹了python使用numpy尋找二維數(shù)組的最值及其下標(biāo)實(shí)現(xiàn)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08python點(diǎn)云地面點(diǎn)濾波(Progressive Morphological Filter)算法介紹(PCL庫(kù))
這篇文章主要介紹了python點(diǎn)云地面點(diǎn)濾波(Progressive Morphological Filter)算法介紹(PCL庫(kù)),了解膨脹/腐蝕這兩個(gè)基礎(chǔ)操作,可以通過(guò)對(duì)其進(jìn)行簡(jiǎn)單組合來(lái)形成開(kāi)/閉操作,需要的朋友可以參考下2021-08-08Python和Pygame庫(kù)開(kāi)發(fā)“小黃狗跑酷”游戲
“小黃狗跑酷”是一款有趣的跑酷類游戲,玩家將控制一只可愛(ài)的小黃狗在城市的街道上跑酷,避開(kāi)障礙物,收集骨頭,盡可能獲得高分,本文將全面介紹如何使用Python和Pygame庫(kù)來(lái)開(kāi)發(fā)這個(gè)游戲,從最初的概念設(shè)計(jì)到最終的代碼實(shí)現(xiàn),幫助您理解游戲開(kāi)發(fā)的基本流程2025-03-03