Matplotlib 简明教程

Matplotlib - Box Plots

箱线图在一个图形中表示数据集的分布。它显示数据集的摘要统计信息,包括最小值、第一个四分位数 (Q1)、中位数 (Q2)、第三个四分位数 (Q3) 和最大值。该箱表示第一个和第三个四分位数之间的四分位间距 (IQR),而胡须则从方框延伸到最小值和最大值。如果存在异常值,它们可能会显示为胡须之外的单独点。

想象一下,你有来自三个班级的学生的考试分数。箱线图是一种显示这些分数如何分布的方法 −

  1. Minimum and Maximum - 情节的末端显示了最小和最大分数。

  2. Quartiles (Q1, Q2, Q3) - 分数分为四部分。中间分数为中位数 (Q2)。低于中位数的分数称为第一四分位数 (Q1),高于中位数的分数称为第三四分位数 (Q3)。它可以帮助你查看大多数分数的位置。

  3. Interquartile Range (IQR) - Q1 和 Q3 之间的范围称为四分位距。

  4. Box - 中间的方框表示四分位距。因此,它显示半数分数所在的位置。

  5. Whiskers - 线段(晶须)从方框延伸到最小和最大分数,它可以帮助你查看分数的离散程度。

  6. Outliers - 任何高于或低于其余分数的分数可能显示为超出晶须之外的点。这些是突出的分数。

box plots1

Box Plot in Matplotlib

我们可以使用 boxplot() 函数在 Matplotlib 中创建箱形图。该函数允许我们自定义箱形图的外观,例如更改晶须长度、添加缺口并指定极端值显示方式。

The boxplot() Function

Matplotlib 中的 boxplot() 函数将一个或多个数据集作为输入,并针对每个数据集生成一个箱形图。

以下是 Matplotlib 中 boxplot() 函数的语法:

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

其中,

  1. x 是要创建箱形图的数据集或数据集列表。

  2. 如果 notch (optional) 为 True,它会创建一个垂直箱形图;如果为 False,会创建一个水平箱形图。

  3. 如果 patch_artist (optional) 为 True,它会使用颜色填充方框。

  4. widths (optional) 表示方框的宽度。

  5. labels (optional) 设置每个数据集的标签,在绘制多个箱形图时有用。

这些只是一些参数;还有更多可选参数可用于自定义。

Horizontal Box Plot with Notches

我们可以创建一个水平箱形图,其中包含切口,以水平方向显示数据集的分布。它在中位线周围包含切口,以直观地估计中值周围的不确定性。

Example

在以下示例中,我们为三个数据集创建了一个水平箱形图,其中包含围绕中值的切口,每个方框在 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()

执行上面的代码后,我们得到以下输出: -

box plots2

Box Plot with Custom Colors

我们可以创建一个具有自定义颜色的箱形图,对数据进行图形化处理,并使用不同的颜色填充方框。每个方框表示类别中值的分布,并且通过添加自定义颜色,我们引入了样式化效果,使得区分类别更加容易。

Example

在这里,我们通过使用自定义颜色(即天蓝色)填充方框来增强箱形图:

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 plots3

Grouped Box Plot

我们可以创建一个分组箱形图来并排比较多个组的分布。每个组有自己的一组箱形,其中每个箱形表示该组中值分布。

Example

现在,我们正在创建一个分组箱形图来比较来自三个不同班级(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()

执行上述代码,我们将得到以下输出 −

box plots4

Box Plot with Outliers

带有异常值箱形图的数据图形表示形式,其中包括有关数据集中极值的其他信息。在标准箱形图中,我们把相对于多数值显著不同的数据点,表示为超出了从箱形图中延伸出来的“须”(whiskers)的单独点。

此图有助于识别可能对数据的总分布产生重大影响的异常值。

Example

在以下示例中,我们正在创建一个箱形图,该图提供每个产品的销售分布的可视化表示,并且异常值突出显示了销售额特别高或低的月份-

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 plots5