1. 直方圖的基本概念
如果你曾經看著自助餐桌,想要決定哪種類型的小吃佔據主導地位,那麼你已經對數據分佈有了些基本的了解。在程式設計裡,我們會用直方圖來挖掘數據中可能不太明顯的規律。直方圖可以幫助我們直觀地分析數據如何分佈在不同的分類或數值範圍內。讓我們開始吧!
什麼是直方圖?
直方圖是一種圖形,用來視覺化數據分佈在某些間隔或 "箱子"(有時候也叫 "籃子" 或 "桶子")裡的情況。舉個例子,如果我們想知道學生在測試中拿到某些分數的次數,直方圖就可以幫助我們展示得非常清楚。
直方圖的主要參數
直方圖由許多條柱子(箱子)組成,每條柱子代表數據落在相應範圍內的數量。主要參數包括:
- 箱子數量 (
bins
):數據範圍被劃分為多少個間隔。 - 顏色與邊框 (
color
和edgecolor
):控制柱子的外觀。 - 範圍 (
range
):設定顯示的最大與最小數值。 - 密度 (
density
):若設定為True
,則直方圖會被標準化,使得柱子的總面積等於 1。
使用 hist()
函數來繪製直方圖
在 Matplotlib 庫裡有一個很棒的 hist()
函數,可以簡化直方圖的繪製。讓我們來看一個簡單的例子:
import matplotlib.pyplot as plt
import numpy as np
# 創建數據集合
data = np.random.normal(0, 1, 1000)
# 畫出直方圖
plt.hist(data, bins=30, alpha=0.7, color='blue')
plt.title('數據分佈直方圖')
plt.xlabel('值')
plt.ylabel('頻率')
plt.show()
在這裡,我們用 np.random.normal()
函數生成了一組數據,這些數據服從正態分佈。我們把數據分成了 30 個箱子,並用參數 alpha
調整柱子的透明度,以便更好地進行視覺化。
2. 調整箱子數量與圖形外觀
確定箱子數量和大小
箱子數量和大小會直接影響直方圖的解讀方式。箱子太大可能會隱藏重要細節,而太小又可能讓圖表顯得雜亂無章,難以理解。
實際範例:
# 改變箱子數量和大小
plt.hist(data, bins=10, color='green', edgecolor='black')
plt.title('10 箱子的直方圖')
plt.xlabel('值')
plt.ylabel('頻率')
plt.show()
plt.hist(data, bins=50, color='red', edgecolor='black')
plt.title('50 箱子的直方圖')
plt.xlabel('值')
plt.ylabel('頻率')
plt.show()
看看當我們使用 10 和 50 個箱子時,直方圖的外觀是如何變化的。有沒有注意到區別?這正是箱子大小對分佈圖表的影響!
實例:更改直方圖參數
直方圖不僅僅可以調整箱子數量,還能改變顏色、透明度,甚至是柱子的樣式。再來看一些範例:
# 其他參數調整
plt.hist(data, bins=30, density=True, color='purple', edgecolor='white', linestyle='dashed')
plt.title('密度直方圖與自定樣式')
plt.xlabel('值')
plt.ylabel('密度')
plt.grid(True)
plt.show()
在這個範例中,我們加入了參數 density=True
,將直方圖正規化,使得圖下的面積等於 1。當你希望分析分佈的概率密度時,這非常有用。
3. 使用實例:直方圖的應用
直方圖在各種領域都有應用,例如分析財務數據或物理實驗的結果等等。接下來看看如何在真實數據集上應用直方圖。
基於真實數據集構建直方圖
想像我們有一組數據,它代表一年的每日平均溫度。我們希望分析溫度分佈在某些範圍內的頻率。
# 簡化過的溫度數據集
temperatures = [15, 16, 15, 14, 19, 22, 24, 25, 17, 18, 15, 16, 23, 24, 21, 19, 18, 20, 22, 25, 26, 27]
# 畫出直方圖
plt.hist(temperatures, bins=5, color='navy', edgecolor='black')
plt.title('溫度分佈直方圖')
plt.xlabel('溫度 (°C)')
plt.ylabel('頻率')
plt.show()
在這個範例中,我們使用了 5 個箱子來檢視數據的分佈。直方圖顯示大多數溫度分佈在 15 到 20°C 的範圍內。
比較多組數據的分佈
有時,為了比較多組數據的分佈,可以使用 Matplotlib 的透明度參數 alpha
將多個直方圖疊加。
範例 3:分佈比較
import matplotlib.pyplot as plt
# 生成數據
data1 = [5, 10, 10, 15, 15, 20, 25, 30, 30, 35, 40]
data2 = [5, 7, 9, 10, 11, 13, 15, 17, 19, 20, 25]
# 繪製疊加直方圖
plt.hist(data1, bins=5, color="blue", alpha=0.5, label="數據集 1")
plt.hist(data2, bins=5, color="green", alpha=0.5, label="數據集 2")
plt.xlabel("值")
plt.ylabel("頻率")
plt.title("兩組分佈的比較")
plt.legend()
plt.show()
此範例中,我們為每個直方圖設置透明度參數 alpha=0.5
,使柱子半透明,方便視覺上比較不同分佈的重疊部分。
操作直方圖的實用技巧
- 選擇最佳箱子數量:根據數據的量級與特性來選取箱子數量,太少或太多會導致圖形失真。
- 比較分佈:使用透明度參數
alpha
疊加多個直方圖進行比較分析。 - 添加網格:網格能幫助更易於理解數據,通過
plt.grid(True)
添加。 - 密度參數
density
:用density=True
將數據以概率密度展示,特別適合分佈比較。
GO TO FULL VERSION