Matplotlib - 箱線圖



箱線圖以圖形方式表示資料集的分佈。它顯示資料集的彙總統計資料,包括最小值、第一四分位數 (Q1)、中位數 (Q2)、第三四分位數 (Q3) 和最大值。箱體代表第一四分位數 (Q1) 和第三四分位數 (Q3) 之間的四分位數範圍 (IQR),而須線則從箱體延伸到最小值和最大值。如果存在異常值,則可能會顯示為須線以外的單個點。

假設您有來自三個班級的學生考試成績。箱線圖是一種顯示這些分數分佈的方式 -

  • 最小值和最大值 - 最小和最大的分數顯示為圖表的末端。

  • 四分位數 (Q1、Q2、Q3) - 分數被分成四部分。中間分數是中位數 (Q2)。中位數以下的分數是第一四分位數 (Q1),中位數以上的分數是第三四分位數 (Q3)。它可以幫助您檢視大多數分數的位置。

  • 四分位數範圍 (IQR) - Q1 和 Q3 之間的範圍稱為四分位數範圍。

  • 箱體 - 中間的箱體代表四分位數範圍。因此,它顯示了分數的一半所在的位置。

  • 須線 - 從箱體延伸到最小和最大分數的線(須線)有助於您檢視分數的分佈情況。

  • 異常值 - 如果有任何分數遠高於或低於其餘分數,則它們可能會顯示為須線以外的點。這些就像突出的分數。

Box Plot

Matplotlib 中的箱線圖

我們可以使用 `boxplot()` 函式在 Matplotlib 中建立箱線圖。此函式允許我們自定義箱線圖的外觀,例如更改須線長度、新增凹口以及指定異常值的顯示。

`boxplot()` 函式

Matplotlib 中的 `boxplot()` 函式接受一個或多個數據集作為輸入,併為每個資料集生成一個箱線圖。

以下是 Matplotlib 中 `boxplot()` 函式的語法 -

語法

plt.boxplot(x, notch=None, patch_artist=None, widths=None, labels=None, ...)

其中,

  • x 是要建立箱線圖的資料集或資料集列表。

  • 如果notch(可選)為 True,則建立垂直箱線圖;如果為 False,則建立水平箱線圖。

  • 如果patch_artist(可選)為 True,則用顏色填充箱體。

  • widths(可選)代表箱體的寬度。

  • labels(可選)為每個資料集設定標籤,在繪製多個箱線圖時非常有用。

這些只是一些引數;還有更多可選引數可用於自定義。

帶凹口的水平箱線圖

我們可以建立一個帶凹口的水平箱線圖,以水平方向顯示資料集的分佈。它包括中位數線周圍的凹口,提供了對中位數值周圍不確定性的視覺估計。

示例

在下面的示例中,我們正在建立一個帶凹口的水平箱線圖,用於三個資料集,其中每個箱體表示沿 y 軸類別的值集 -

import matplotlib.pyplot as plt

# Data
data = [[1, 2, 3, 4, 5], [3, 6, 8, 10, 12], [5, 10, 15, 20, 25]]

# Creating a horizontal box plot with notches
plt.boxplot(data, vert=False, notch=True)
plt.title('Horizontal Box Plot with Notches')
plt.xlabel('Values')
plt.ylabel('Categories')
plt.show()

輸出

執行上述程式碼後,我們將得到以下輸出 -

Horizontal Box Plot with Notches

帶自定義顏色的箱線圖

我們可以建立一個帶自定義顏色的箱線圖,以不同的顏色圖形化地表示資料以填充箱體。每個箱體代表一個類別中值的分佈,透過新增自定義顏色,我們引入了風格化的觸感,使類別之間的區分更容易。

示例

在這裡,我們透過用自定義顏色(即天藍色)填充箱體來增強箱線圖 -

import matplotlib.pyplot as plt
data = [[1, 2, 3, 4, 5], [3, 6, 8, 10, 12], [5, 10, 15, 20, 25]]

# Creating a box plot with custom colors
plt.boxplot(data, patch_artist=True, boxprops=dict(facecolor='skyblue'))
plt.title('Box Plot with Custom Colors')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.show()

輸出

以下是上述程式碼的輸出 -

Box Plot with Custom Colors

分組箱線圖

我們可以建立一個分組箱線圖來並排比較多個組的分佈。每個組都有自己的一組箱體,其中每個箱體代表該組中值的分佈。

示例

現在,我們正在建立一個分組箱線圖來比較三個不同班級 (A、B 和 C) 的學生考試成績。每個箱體代表一個班級中分數的分佈,使我們能夠輕鬆觀察和比較三個班級的集中趨勢、離散程度和潛在異常值 -

import matplotlib.pyplot as plt
import numpy as np
class_A_scores = [75, 80, 85, 90, 95]
class_B_scores = [70, 75, 80, 85, 90]
class_C_scores = [65, 70, 75, 80, 85]

# Creating a grouped box plot
plt.boxplot([class_A_scores, class_B_scores, class_C_scores], labels=['Class A', 'Class B', 'Class C'])
plt.title('Exam Scores by Class')
plt.xlabel('Classes')
plt.ylabel('Scores')
plt.show()

輸出

執行上述程式碼後,我們將得到以下輸出 -

Grouped Box Plot

帶異常值的箱線圖

帶異常值的箱線圖是資料的圖形表示,其中包含有關資料集中極值的其他資訊。在標準箱線圖中,我們將異常值(與大多數資料顯著不同的資料點)表示為超出從箱體延伸的“須線”的單個點。

此圖有助於識別可能對資料的整體分佈產生重大影響的異常值。

示例

在下面的示例中,我們正在建立一個箱線圖,該圖直觀地表示每種產品的銷售分佈,而異常值則突出顯示銷售額異常高或低的月份 -

import matplotlib.pyplot as plt
import numpy as np

# Data for monthly sales
product_A_sales = [100, 110, 95, 105, 115, 90, 120, 130, 80, 125, 150, 200]
product_B_sales = [90, 105, 100, 98, 102, 105, 110, 95, 112, 88, 115, 250]
product_C_sales = [80, 85, 90, 78, 82, 85, 88, 92, 75, 85, 200, 95]

# Introducing outliers 
product_A_sales.extend([300, 80])
product_B_sales.extend([50, 300])
product_C_sales.extend([70, 250])

# Creating a box plot with outliers
plt.boxplot([product_A_sales, product_B_sales, product_C_sales], sym='o')
plt.title('Monthly Sales Performance by Product with Outliers')
plt.xlabel('Products')
plt.ylabel('Sales')
plt.show()

輸出

執行上述程式碼後,我們將得到以下輸出 -

Box Plot with Outliers
廣告