折線圖和散點圖常用且實用,但是並不能滿足我們的作圖需求。
這次我們會嘗試更多常見的統計圖形,比如條形圖、直方圖、餅圖等,我們的目標是掌握工作學習過程中使用最頻繁的圖形技能。
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 pltimport 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 pltimport 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 pltimport 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 pltimport matplotlib as mplimport 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 pltimport 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 pltimport 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 pltimport 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』將線條設置為虛線、將數據點設置為大圓點、將顏色設置為綠色。
好了,以上就是今天要分享的幾種常用的統計圖形,今天我們的目標就是掌握這些圖形對應的函數的基本調用,後邊我們會詳細探索它們在實際的數據分析過程中的應用。