從零開始學matplotlib畫圖(二): 統計圖形入門
文章目錄
折線圖和散點圖常用且實用,但是並不能滿足我們的作圖需求。
這次我們會嘗試更多常見的統計圖形,比如條形圖、直方圖、餅圖等,我們的目標是掌握工作學習過程中使用最頻繁的圖形技能。
###############################################################################
#_____________________________________________________________________________#
#| ______ ___ __________ ___ __ |#
#| / __ \ / | /___ ___/ / | / / |#
#| / / \ | / /| | /* / /| | / / DataInsights |#
#| / / / / / /_| | `/ / / | | / / |#
#| / / / / / ___ | / ` / / | | / / [email protected] |#
#| / /___/ / / / | | ___ `/__ / / | |/ / |#
#|/_________/ /_/ |_|/________//_/ |___/ https://data-insights.cn/ |#
#|___________________________________________________________________________|#
###############################################################################
1. 柱狀圖(條形圖) —— bar() / barh()
柱狀圖又叫條形圖,用於繪製定性(分類)資料的分佈特徵,比如不同國家的GDP、不同年齡段的平均體重等。這次,我們以一組學生的身高來演示它的作圖方法。
import matplotlib.pyplot as plt
# 生成資料
x = [1, 2, 3, 4, 5, 6, 7, 8]
y = [176, 165, 188, 150, 170, 180, 172, 160]
# 畫柱狀圖
plt.bar(x, y,
align = 'center',
color = 'c',
tick_label = ['q', 'a', 'c', 'e', 'r', 'j', 'b', 'p'],
hatch = '/')
# 設定軸標籤
plt.xlabel('學生編號')
plt.ylabel('身高(cm)')
plt.show()
引數:
- align:對齊方式,即條形相對於刻度的位置
- color:顏色
- tick_label:刻度的標籤
- hatch:填充
我們還可以使用barh
畫水平(horizontal)方向的條形圖,它們兩個函式的引數基本一致,只是我們要將xlabel和ylabel的值對調一下(注意:x和y不需要對調):
import matplotlib.pyplot as plt
# 生成資料
x = [1, 2, 3, 4, 5, 6, 7, 8]
y = [176, 165, 188, 150, 170, 180, 172, 160]
# 畫柱狀圖
plt.barh(x, y,
align = 'center',
color = 'c',
tick_label = ['q', 'a', 'c', 'e', 'r', 'j', 'b', 'p'],
hatch = '/')
# 設定軸標籤
plt.xlabel('身高(cm)')
plt.ylabel('學生編號')
plt.show()
2. 直方圖 —— hist()
直方圖跟條形圖很像,但是直方圖是用於表現定量資料的分佈,比如說中國人口的年齡分佈情況、一所高中高三所有學生的高考成績的分佈情況等。跟bar()
和barh()
不同的是,hist()
函式輸入的只有一組資料,在輸出的圖形中,橫座標對應著不同的分組,縱座標則對應著該組的計數。
import matplotlib.pyplot as plt
import numpy as np
# 生成資料
x = np.random.randint(0, 10, 500)
# 直方圖
plt.hist(x,
bins = range(0, 11),
color = 'g',
histtype = 'bar',
rwidth = 0.95,
alpha = 0.6)
# 設定軸標籤
plt.xlabel('分組')
plt.ylabel('計數')
plt.show()
引數:
- bins:如果引數是一個整數,則相當於我們制定了分桶的數量,如果引數是一個列表,則相當於我們指定了每個分桶的邊界。
- histtype:分桶樣式
- rwidth:相對寬度,即每個柱子寬度相對於兩個刻度之間寬度的比例。
- alpha:透明度
3. 餅圖 —— pie()
餅圖主要用於繪製不同型別的百分比,比如不同國家的人口占比、一個員工的薪資構成等。我們假設有ABCD四個公司,他們瓜分了一塊市場,我們用餅圖來將他們的市場佔有情況表現出來:
import matplotlib.pyplot as plt
import numpy as np
# 生成資料
ratio = [0.1, 0.4, 0.35, 0.15]
labels = ['A', 'B', 'C', 'D']
# 直方圖
plt.pie(ratio, labels=labels, autopct='%3.1f%%', startangle=90)
# 設定軸標籤
plt.title('不同公司市場佔比')
plt.show()
引數:
- labels: 類別標籤/名稱
- autopct:餅圖種比例數字的格式
- startangle:起始角度,預設會逆時針從水平0度角開始排列
- color:我們可以用一個列表指定不同分類的顏色ß
4. 極線圖 —— polar()
這一函式用於在極座標軸上繪製折線圖。
import matplotlib.pyplot as plt
import numpy as np
# 生成資料
theta = np.linspace(0, 2*np.pi, 12, endpoint=False)
r = np.random.rand(12)
# 極線圖
plt.polar(theta, r,
color = 'chartreuse',
linewidth = 2,
marker = '*',
mfc = 'b',
ms = 10)
plt.show()
5. 散點圖 —— scatter()
我們在之前已經接觸過散點圖了,但是這次我們將展示更強大的散點圖。
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
# 生成資料
x = np.random.randn(100)
y = np.random.randn(100)
# 散點圖
plt.scatter(x, y,
s = np.power(10*x+20*y, 2),
c = np.random.rand(100),
cmap = mpl.cm.RdYlBu,
marker = 'o',
alpha = 0.3)
)
plt.show()
我們指定了橫縱座標的資料、每個點的大小、每個點的顏色以及浮點數到顏色的對映表、標記的形狀以及透明度,看,通過這種方式,我們可以對多維資料進行視覺化。
6. 杆圖 —— stem()
劉大成先生在《Python資料視覺化之matplotlib實踐》一書中將其翻譯為棉棒圖,挺形象的,但是我還是強行使用了杆圖的名字,雖然這個名字簡直難聽到了天際……
杆圖用於繪製離散而有序的資料,在圖中,這些離散的點會分佈在一條基線的上下兩側,我們可以直觀地感受到它們的波動趨勢以及分佈情況。
import matplotlib.pyplot as plt
import numpy as np
# 生成資料
x = np.linspace(0, 10, 20)
y = np.random.randn(20)
# 繪圖
plt.stem(x, y, linefmt='-.', markerfmt='o', basefmt='-')
plt.show()
引數:
- linefmt:離散點到基線的垂線的樣式
- markerfmt:離散點的樣式
- basefmt:基線的樣式
這裡fmt是format的簡寫。
7. 箱線圖 —— boxplot()
箱線圖是非常經典、實用且常用的一種用於觀察連續資料分佈的圖形,它能清晰地展示出資料的上下四分位數、上下邊緣、中位數的位置,還能根據規則幫助我們確定一些異常值,是觀察資料分佈的一大利器。
import matplotlib.pyplot as plt
import numpy as np
# 生成資料
x = np.random.randn(1000)
# 繪圖
plt.boxplot(x)
# 新增網格
plt.grid(axis='y', ls=':', lw=1, color='gray', alpha=0.4)
plt.show()
8. 誤差棒圖 —— errorbar()
此函式用於繪製y軸方向或者x軸方向的誤差範圍:
import matplotlib.pyplot as plt
import numpy as np
# 生成資料
x = np.linspace(0, 1, 10)
y = np.exp(x)
# 繪圖
plt.errorbar(x, y, fmt=':og', yerr=np.power(x, 2), xerr=0.02)
plt.show()
這裡我們使用橫座標的平方作為y軸方向上的誤差,同時使用一個常數0.02作為x軸方向上的誤差。在fmt(format)引數下,我們使用’:og’將線條設定為虛線、將資料點設定為大圓點、將顏色設定為綠色。
好了,以上就是今天要分享的幾種常用的統計圖形,今天我們的目標就是掌握這些圖形對應的函式的基本呼叫,後邊我們會詳細探索它們在實際的資料分析過程中的應用。