詳解matplotlib直方圖

一、基本概念

直方圖是一種常用的數據可視化方式,用於描述定量數據的分布情況。它將數據按照大小分成若干個等距的區間,然後用柱狀圖表示每個區間內數據的頻數或頻率。

具體而言,直方圖包含以下幾個重要的概念:

數據:待處理的數據,可以是一維數組或列表;

區間:將數據劃分成若干個相鄰且等距的區間,可以使用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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
SRDDH的頭像SRDDH
上一篇 2025-02-05 13:05
下一篇 2025-02-05 13:05

相關推薦

  • 直方圖均衡Python

    對於圖像處理,直方圖均衡是一種很常用的圖像增強技術,可以將一幅圖像中灰度較低的區域和灰度較高的區域之間的灰度值差異增強,達到提高圖像對比度的目的。Python中也有相關庫函數可以實…

    編程 2025-04-29
  • Python最強大的製圖庫——Matplotlib

    Matplotlib是Python中最強大的數據可視化工具之一,它提供了海量的製圖、繪圖、繪製動畫的功能,通過它可以輕鬆地展示數據的分布、比較和趨勢。下面將從多個方面對Matplo…

    編程 2025-04-29
  • Python三大:NumPy、Pandas、matplotlib

    本文將詳細介紹三大Python數據處理及可視化庫——NumPy、Pandas以及matplotlib,為讀者提供從基礎使用到應用場景的全面掌握。 一、NumPy NumPy是Pyt…

    編程 2025-04-27
  • Python畫圖:Matplotlib的使用

    Matplotlib是Python中最常用的畫圖庫之一。它可以輕鬆地創建各種類型的圖表,包括直方圖、散點圖、線圖、餅圖等等。本文將從以下幾個方面對Matplotlib的使用進行詳細…

    編程 2025-04-27
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web服務器。nginx是一個高性能的反向代理web服務器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25

發表回復

登錄後才能評論