使用matplotlib繪制并排柱狀圖的實(shí)戰(zhàn)案例
一、概念說明
柱狀圖(bar chart),從相同的橫坐標(biāo)出發(fā),以不同的數(shù)值大小來設(shè)定柱子的高度,進(jìn)而表示無序或有序的定性數(shù)據(jù)間某個(gè)定量指標(biāo)的大小關(guān)系。
示意圖如下:

(1) 在無序的橫坐標(biāo)情景下,我們常常根據(jù)數(shù)值大小降序排布。
(2) 柱狀圖在縱坐標(biāo)上可以有正有負(fù),但必須以基準(zhǔn)的0線開始繪制,否則會(huì)傳遞錯(cuò)誤的視覺信息。
(3) 當(dāng)類別間數(shù)值差異較大/類別較多/類別命名文本較長時(shí),我們可以考慮將柱形圖逆轉(zhuǎn)90°,即使用條形圖。
(4)如果手中的數(shù)據(jù)是二維定性的情況,可以根據(jù)需求分別選擇堆疊柱狀圖或者并排柱狀圖。
①堆疊柱狀圖:

--- 關(guān)注類0-4的大類總量的對(duì)比
--- 同時(shí)關(guān)注小類a/b占大類的比重
② 并排柱狀圖(案例對(duì)象)

--- 更關(guān)注小類系列1-3在不同大類1-4間的對(duì)比
--- 關(guān)注小類在大類間數(shù)值分布的差異
--- 如果要呈現(xiàn)大類總量信息,可以增加折線圖
二、數(shù)據(jù)展示
在本案例中, 我們是希望使用python編碼,利用其中matplotlib包繪制并排柱狀圖,因此我們需要二維定序數(shù)據(jù)。
根據(jù)我專欄其它的案例呢,還是繼續(xù)使用隨機(jī)選的八座城市,目的是希望了解八座城市小初高學(xué)校數(shù)量對(duì)比(柱狀),以及人口數(shù)情況(折線)。
秉持城市統(tǒng)計(jì)公報(bào)中有就記錄,無就百度的原則,得到以下僅供繪圖的數(shù)據(jù)。


上述excel表格的數(shù)據(jù)分別存放,利用下述代碼我們將其導(dǎo)入
import pandas as pd
school_num = pd.DataFrame(pd.read_excel('./小初高學(xué)校個(gè)數(shù).xlsx'))
people_num = pd.DataFrame(pd.read_excel('./2020人口普查數(shù)據(jù).xlsx'))三、圖像繪制
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
# 中文和正負(fù)號(hào)設(shè)置
mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
x = np.arange(8)
bar_width = 0.3
tick_label = school_num['城市']
plt.figure(figsize=(13,7))
# 柱狀
plt.bar(x, school_num['小學(xué)'], bar_width, align="center", color="#2bb179", label='小學(xué)', alpha=0.5)
plt.bar(x+bar_width, school_num['初中'], bar_width, color="b", align="center", label="初中", alpha=0.5)
plt.bar(x+bar_width*2, school_num['高中'], bar_width, color="orange", align="center", label="高中", alpha=0.5)
# 折線
plt.plot(x+bar_width, people_num['人數(shù)-萬'], color="#ff796c", marker='o', lw=2,label='人口普查數(shù)(萬)')
text_x = [x,x+bar_width,x+bar_width*2]
text_x = [text_x[i][j] for i in range(3) for j in range(8) ]
text_y = [school_num['小學(xué)'],school_num['初中'],school_num['高中']]
text_y = [text_y[i][j] for i in range(3) for j in range(8) ]
plt.xticks(x+bar_width, tick_label,fontsize=18)
plt.yticks(fontsize=18)
plt.xlabel("城市",fontsize=20)
plt.ylabel("學(xué)校數(shù)量",fontsize=20)
plt.legend(fontsize=16)
plt.grid()
# 柱型加數(shù)字
for x,y,text in zip(text_x,text_y,text_y):
plt.text(x-0.12,y+15,str(text),fontsize=12)
# plt.savefig(r'./并排柱狀圖示例.png')plt.bar(橫坐標(biāo)位置,柱子數(shù)值) --- 橫坐標(biāo)位置一般用np.arange(橫坐標(biāo)類別數(shù))得到,因此在并排中,每一個(gè)小類,都要右移窗寬個(gè)單位,如果您覺得緊挨著顯得很密,也可以加0.1讓它們稍稍隔開。
plt.plot 的橫坐標(biāo)我選擇x+bar_width是因?yàn)槲覀冇腥齻€(gè)柱子,我希望折線的原點(diǎn)是對(duì)應(yīng)橫坐標(biāo)居中顯示。
plt.text --- 這一部分是給整幅圖加文字,但具體加在什么位置需要自己指定。
plt.xticks(原名稱,新名稱)
繪制結(jié)果:

希望對(duì)您有所幫助~
總結(jié)
到此這篇關(guān)于使用matplotlib繪制并排柱狀圖的文章就介紹到這了,更多相關(guān)matplotlib繪制并排柱狀圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何基于matlab相機(jī)標(biāo)定導(dǎo)出xml文件
這篇文章主要介紹了如何基于matlab相機(jī)標(biāo)定導(dǎo)出xml文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
Python tabulate結(jié)合loguru打印出美觀方便的日志記錄
在開發(fā)過程中經(jīng)常碰到在本地環(huán)境無法完成聯(lián)調(diào)測試的情況,必須到統(tǒng)一的聯(lián)機(jī)環(huán)境對(duì)接其他系統(tǒng)測試。往往是出現(xiàn)了BUG難以查找數(shù)據(jù)記錄及時(shí)定位到錯(cuò)誤出現(xiàn)的位置。本文將利用tabulate結(jié)合loguru實(shí)現(xiàn)打印出美觀方便的日志記錄,需要的可以參考一下2022-10-10
簡單了解Django ORM常用字段類型及參數(shù)配置
這篇文章主要介紹了簡單了解Django ORM常用字段類型及參數(shù)配置,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
python如何實(shí)現(xiàn)異步調(diào)用函數(shù)執(zhí)行
這篇文章主要介紹了python如何實(shí)現(xiàn)異步調(diào)用函數(shù)執(zhí)行,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
Python基于QRCode實(shí)現(xiàn)生成二維碼的方法【下載,安裝,調(diào)用等】
這篇文章主要介紹了Python基于QRCode實(shí)現(xiàn)生成二維碼的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python下載,安裝與調(diào)用QRCode實(shí)現(xiàn)生成二維碼功能的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-07-07
Python使用pickle模塊存儲(chǔ)數(shù)據(jù)報(bào)錯(cuò)解決示例代碼
這篇文章主要介紹了Python使用pickle模塊存儲(chǔ)數(shù)據(jù)報(bào)錯(cuò)解決示例代碼,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
基于Python利用Faker批量測試數(shù)據(jù)
這篇文章主要介紹了基于Python利用Faker批量測試數(shù)據(jù)。測試過程中,經(jīng)常需要批量去造數(shù)據(jù),方法有很多,最簡單方便的應(yīng)該是使用python?的一個(gè)三方庫Faker。下面我們就來看看三方庫Faker如何批量測試數(shù)據(jù),需要的朋友可以參考一下2022-03-03

