1. 程式人生 > >從零開始學matplotlib畫圖(二): 統計圖形入門

從零開始學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’將線條設定為虛線、將資料點設定為大圓點、將顏色設定為綠色。

好了,以上就是今天要分享的幾種常用的統計圖形,今天我們的目標就是掌握這些圖形對應的函式的基本呼叫,後邊我們會詳細探索它們在實際的資料分析過程中的應用。