首頁 > 軟體

基於Python+Matplotlib實現直方圖的繪製

2022-04-16 13:00:24

1.關於直方圖

直方圖 也稱 質量分佈圖,雖然看起來像柱狀圖,

實際上區別又很大。直方圖通常橫軸表示資料型別,縱軸表示各資料型別的分佈情況。

直方圖又可以分為頻數分佈直方圖和頻率分佈直方圖。其繪製方法並無多少差異,只是描述的事件有所不同。頻數分佈直方圖描述的是某事件的數量,而頻率分佈則描述的是其發生的頻率。

而關於頻率分佈直方圖,又可以理解為是“密度圖”的一種。頻率分佈直方圖 和 密度圖 都可以用來描述事件的概率分佈,其中頻率分佈直方圖描述的是離散型隨機變數的概率分佈,而密度圖則描述的是連續型隨機變數的概率分佈。

2.plt.hist()

繪製直方圖通過plt.hist()方法實現,其常用的引數有:

x 資料集

bins ------------- 統計資料的區間分佈。可以是一個元素為數值的列表,也可以是一個數值。是一個數值的時候可以配合range引數使用。

range ----------- 元組型別,顯示的區間。

當設定區間分佈使用數值型的bins和range引數設定時:range確定一個範圍,傳入形式是一個元組(注意不是range範圍物件),左右端點值都可取。數值型的bins表示將該範圍分成的份數(等分)。

density --------- 布林型,顯示頻率統計結果。預設為None(相當於False),設為False不顯示頻率統計結果;設為True則顯示頻率統計結果,即繪製出的影象由頻數分佈直方圖變為頻率分佈直方圖。

histtype -------- 可選引數,即直方圖的型別。預設為bar,即繪製出的“柱狀”條形。還可以設定為barstacked、step、stepfilled。

align -------------可選引數,控制柱狀圖的水平分佈,設定值為left、mid 或 right,預設值為mid,也推薦使用mid。left和right會產生部分的空白區域。

log --------------- 布林型別,預設為False,即y軸是否選擇指數刻度。

stacked --------- 布林型別,預設為False,表示是否為堆積柱狀圖。

edgecolor------- 設定邊沿顏色

facecolor-------- 可以用來設定直方圖的顏色,也可以簡寫為color。

orientation-------直方圖的方向,預設為豎直方向上的(‘vertical’),設為’horizontal’則表示水平方向上的。

cumulative------預設為False,表示不累積。如果為True則設定累積分度直方圖。

3. 繪製一幅簡單的 頻數 分佈直方圖

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['axes.facecolor'] ='#cc00ff'
# 設定亂數種子為30
np.random.seed(30)
data = np.random.randint(0, 100, 100)
plt.hist(data, bins=[0, 25, 50, 75, 100], facecolor='#ffff00', edgecolor='#FF0000')
plt.xlabel('X指標')
plt.ylabel('樣本個數')
plt.title('X指標頻數分佈直方圖')
plt.show()

4. 繪製一幅 頻率 分佈直方圖

將density設定為True即可·。

此外我們再修改一些細節,將histtype引數設定為stepfilled(梯狀且填充)。

並把y軸的標籤由“樣本個數”改為“樣本頻率”。

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['axes.facecolor'] ='#cc00ff'
np.random.seed(30)
data = np.random.randint(0, 100, 100)
plt.hist(data, bins=[0, 25, 50, 75, 100], facecolor='#ffff00', edgecolor='#FF0000', density=True, histtype='stepfilled')
plt.xlabel('X指標')
plt.ylabel('樣本頻率')
plt.title('X指標頻數分佈直方圖')
plt.show()

影象效果如下:

5. 累積分佈直方圖(水平方向)

增加引數cumulative=True, orientation=‘horizontal’。

此外,因為影象變成了水平方向,所以也需要把x、y軸標籤互換並稍作調整。

這裡設定區間分佈使用數值型的bins和range引數設定,範圍為0-100,區間分割為10等份。

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['axes.facecolor'] ='#cc00ff'
np.random.seed(30)
data = np.random.randint(0, 100, 100)
plt.hist(data, bins=10, range=(0, 100), facecolor='#ffff00', edgecolor='#FF0000', density=True, cumulative=True, orientation='horizontal')
plt.xlabel('樣本累積頻率')
plt.ylabel('X指標')
plt.title('X指標頻數分佈直方圖')
plt.show()

影象效果如下:

到此這篇關於基於Python+Matplotlib實現直方圖的繪製的文章就介紹到這了,更多相關Python Matplotlib直方圖內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com