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
广告