一、基本概念
直方圖是一種常用的數據可視化方式,用於描述定量數據的分布情況。它將數據按照大小分成若干個等距的區間,然後用柱狀圖表示每個區間內數據的頻數或頻率。
具體而言,直方圖包含以下幾個重要的概念:
數據:待處理的數據,可以是一維數組或列表;
區間:將數據劃分成若干個相鄰且等距的區間,可以使用numpy庫中的linspace函數生成;
頻數:每個區間內數據的個數;
頻率:每個區間內數據個數佔總體數據個數的比例;
柱狀圖:用矩形條表示每個區間的頻數或頻率,柱狀圖的高度反映了區間內數據的多少。
二、繪製基本直方圖
在matplotlib中使用hist函數可以繪製基本的直方圖。函數的常用參數包括:
x:一維數組或列表,表示原始數據;
bins:整數或序列,表示數據分段的方式;
density:布爾類型,默認為False,表示是否歸一化;
下面的代碼展示了如何繪製簡單的直方圖:
import numpy as np import matplotlib.pyplot as plt # 生成隨機數據 data = np.random.normal(0, 1, 1000) # 繪製直方圖 plt.hist(data, bins=30, density=True, alpha=0.5) plt.title('Basic Histogram') plt.xlabel('Value') plt.ylabel('Frequency') plt.show()
上述代碼首先使用numpy庫生成了一個均值為0,標準差為1的隨機數據,然後使用hist函數將其繪製成直方圖。其中,bins參數為30表示將數據分成30段,density參數為True表示將直方圖進行歸一化處理,這樣可以將頻率轉換成概率,使得每個區間的面積和為1。
三、設置直方圖屬性
1、顏色和透明度
可以使用color參數設置直方圖的顏色,使用alpha參數設置透明度。如下代碼所示:
# 繪製直方圖 plt.hist(data, bins=30, density=True, color='r', alpha=0.5) plt.title('Histogram with color and transparency') plt.xlabel('Value') plt.ylabel('Frequency') plt.show()
2、邊框和填充
可以使用edgecolor參數設置邊框顏色,使用linewidth參數設置邊框線寬,使用fill參數設置是否填充。如下代碼所示:
# 繪製直方圖 plt.hist(data, bins=30, density=True, edgecolor='k', linewidth=1, fill=True) plt.title('Histogram with border and fill') plt.xlabel('Value') plt.ylabel('Frequency') plt.show()
3、堆疊直方圖
可以使用stacked參數將多組數據堆疊在一起,如下代碼所示:
# 生成兩組隨機數據 data1 = np.random.normal(0, 1, 1000) data2 = np.random.normal(2, 1, 1000) # 繪製堆疊直方圖 plt.hist([data1, data2], bins=30, density=True, stacked=True) plt.title('Stacked Histogram') plt.xlabel('Value') plt.ylabel('Frequency') plt.show()
四、進階應用
1、直方圖密度估計
直方圖密度估計是通過將數據分段並在每個區間內擬合一個核密度函數來估計數據的概率密度分布。在matplotlib中,可以使用kde參數進行設置,如下代碼所示:
# 生成隨機數據 data = np.random.normal(0, 1, 1000) # 繪製直方圖密度估計 plt.hist(data, bins=30, density=True, alpha=0.5, color='purple', edgecolor='k', linewidth=1, kde=True) plt.title('Histogram with density estimation') plt.xlabel('Value') plt.ylabel('Frequency') plt.show()
2、直方圖分組
有時候數據的範圍較大,可以通過將數據分組來減小每個區間內數據的數量,以便更好地展示數據的分布情況。分組的方法可以使用numpy庫中的linspace函數生成一個等差數列,如下代碼所示:
# 生成隨機數據 data = np.random.normal(0, 1, 1000) # 將數據分成兩組 groups = np.linspace(min(data), max(data), 3) group_names = ['Low', 'High'] # 使用cut函數將數據分到指定的組中 category = pd.cut(data, groups, labels=group_names) # 將數據按照組別進行分組 df = pd.DataFrame({'data': data, 'category': category}) df_grouped = df.groupby('category') # 繪製直方圖 plt.hist([df_grouped.get_group(name)['data'] for name in group_names], bins=30, density=True, alpha=0.5) plt.title('Histogram with grouping') plt.xlabel('Value') plt.ylabel('Frequency') plt.show()
3、子圖繪製
有時候需要同時比較多組數據的直方圖,可以使用matplotlib中的子圖功能進行繪製。具體可以使用subplot函數實現,如下代碼所示:
# 生成多組隨機數據 data1 = np.random.normal(0, 1, 1000) data2 = np.random.normal(2, 1, 1000) data3 = np.random.normal(4, 1, 1000) # 繪製子圖 fig, axs = plt.subplots(1, 3, figsize=(12, 4)) axs[0].hist(data1, bins=30, density=True, alpha=0.5, color='r') axs[0].set_title('Histogram 1') axs[0].set_xlabel('Value') axs[0].set_ylabel('Frequency') axs[1].hist(data2, bins=30, density=True, alpha=0.5, color='g') axs[1].set_title('Histogram 2') axs[1].set_xlabel('Value') axs[1].set_ylabel('Frequency') axs[2].hist(data3, bins=30, density=True, alpha=0.5, color='b') axs[2].set_title('Histogram 3') axs[2].set_xlabel('Value') axs[2].set_ylabel('Frequency') plt.show()
五、總結
本文從基本概念、繪製基本直方圖、設置直方圖屬性、進階應用四個方面詳細介紹了matplotlib直方圖的使用方法,並給出了相應的代碼示例。通過學習,我們可以更好地進行數據可視化,並更好地展示數據分布的特點。具體而言,我們可以設置直方圖的顏色、邊框、柱狀圖的堆疊方式、直方圖密度估計、直方圖分組、子圖繪製等功能,以更好地展現數據特點。
原創文章,作者:SRDDH,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/334597.html