數(shù)據(jù)可視化 | 20行代碼玩轉(zhuǎn)象限圖!
Python 的繪圖功能非常強(qiáng)大,如果能將已有的繪圖庫的各種復(fù)雜操作匯總在一個(gè)自己寫的函數(shù)甚至是庫/包中,并實(shí)現(xiàn)一行代碼就調(diào)用并實(shí)現(xiàn)復(fù)雜的繪圖功能,那就更是如虎添翼。
今天,我們就來講講一學(xué)就會的象限圖。

上圖學(xué)名叫波士頓矩陣分析圖,大白話四象限圖。這種圖經(jīng)常用于兩個(gè)維度的散點(diǎn)圖中,根據(jù)特定的分割線(均值,目標(biāo)值,實(shí)際值等)將數(shù)據(jù)分為四類,使人一目了然。
常用的場景為分析兩個(gè)維度的變化比如:比較商品的庫存天數(shù)和庫存周轉(zhuǎn)率,充值人數(shù)和每付費(fèi)用戶平均收益,購物籃系數(shù)和購物籃數(shù)量等。
如何使用 Python 畫出此圖是本文的目標(biāo),事不宜遲,趕快開始!
任何復(fù)雜的 Python 繪圖都不是一蹴而就的,而是先畫出基礎(chǔ)圖形,后在此基礎(chǔ)上按需添加元素并優(yōu)化而成。這里以一組城市經(jīng)濟(jì)數(shù)據(jù)為例來講解繪圖步驟
? ?基礎(chǔ)散點(diǎn)圖
df?=?pd.read_csv('data.csv')df; df.plot(kind='scatter', x='經(jīng)濟(jì)總量水平', y='人均水平')

簡潔又樸素的散點(diǎn)圖,僅需一行代碼。離期望成圖還差幾步
為每個(gè)點(diǎn)添加對應(yīng)的城市名稱
添加特定的分割線(均值,目標(biāo)值,實(shí)際值)
背景添加網(wǎng)格
一些其他的定制需求...


廣西,河北,福建三地的人均水平和經(jīng)濟(jì)總量水平都偏低
上海的人均經(jīng)濟(jì)水平很高,但經(jīng)濟(jì)總量水平缺只是略優(yōu)于均值
廣東的人均經(jīng)濟(jì)水平稍次于均值,但經(jīng)濟(jì)總量水平很高
等等~

大量重復(fù)的工作懂得批處理。
反復(fù)要做的固定操作固化成?" 模板 “,” 套路 "。
碰到異常情況,知道如何準(zhǔn)確高效的解決。
import?matplotlib.pyplot?as?plt# 為每個(gè)點(diǎn)添加對應(yīng)的城市名稱plt.figure(figsize=(10, 8))# 基礎(chǔ)散點(diǎn)圖:這里需要單獨(dú)拆開 x,y 軸和希望配對的標(biāo)簽,為下面的輪子做準(zhǔn)備x, y = df['經(jīng)濟(jì)總量水平'], df['人均水平']label = df['area']plt.scatter(x, y)plt.xlabel('經(jīng)濟(jì)總量水平'); plt.ylabel('人均水平')# 對散點(diǎn)圖中的每一個(gè)點(diǎn)進(jìn)行文字標(biāo)注## 固定代碼,無需深究,拿來即用for a,b,l in zip(x,y,label): # zip 拉鏈函數(shù)將其配對組合plt.text(a, b+0.1, '%s.' % l, ha='center', va='bottom',fontsize=14)# 0.1 向上輕微偏移# 添加特定分割線## vlines: vertical 垂直于 x 軸的線,在變量'經(jīng)濟(jì)總量'的均值處開始畫,## y 軸的范圍[1.5, 3]plt.vlines(x=df['經(jīng)濟(jì)總量水平'].mean(), ymin=-1.5, ymax=3,colors='red', linewidth=2)plt.hlines(y=df['人均水平'].mean(), xmin=-4, xmax=6,colors='red', linewidth=2)# 背景網(wǎng)格plt.grid(True)# 定制需求:隱去四周的邊框線條# sns.despine(trim=True, left=True, bottom=True)

推薦閱讀
(點(diǎn)擊標(biāo)題可跳轉(zhuǎn)閱讀)
介紹一款分享真實(shí)互聯(lián)網(wǎng)薪資的小程序
轉(zhuǎn)了嗎 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ?贊了嗎 在看嗎



