使用 PatchCollection 从误差线创建箱线图

Beginner

This tutorial is from open-source community. Access the source code

简介

在本实验中,我们将学习如何使用 PatchCollection 从误差线创建箱线图。箱线图对于展示数据的范围和分布很有用。通过添加一个由 x 和 y 方向上的误差线限制定义的矩形补丁,我们可以制作出更具视觉吸引力的误差线图。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。

导入库

我们首先将导入必要的库,包括 numpymatplotlib

import matplotlib.pyplot as plt
import numpy as np

from matplotlib.collections import PatchCollection
from matplotlib.patches import Rectangle

准备数据

然后我们将为箱线图准备数据。我们将为 x 和 y 值以及误差值创建一些虚拟数据。

## 数据点数量
n = 5

## 虚拟数据
np.random.seed(19680801)
x = np.arange(0, n, 1)
y = np.random.rand(n) * 5.

## 虚拟误差(上下)
xerr = np.random.rand(2, n) + 0.1
yerr = np.random.rand(2, n) + 0.2

创建误差框函数

现在我们将创建一个名为 make_error_boxes 的函数,该函数将创建一个由 x 和 y 方向上的误差线限制定义的矩形补丁。

def make_error_boxes(ax, xdata, ydata, xerror, yerror, facecolor='r',
                     edgecolor='none', alpha=0.5):

    ## 遍历数据点;根据每个点的误差创建框
    errorboxes = [Rectangle((x - xe[0], y - ye[0]), xe.sum(), ye.sum())
                  for x, y, xe, ye in zip(xdata, ydata, xerror.T, yerror.T)]

    ## 使用指定的颜色/透明度创建补丁集合
    pc = PatchCollection(errorboxes, facecolor=facecolor, alpha=alpha,
                         edgecolor=edgecolor)

    ## 将集合添加到坐标轴
    ax.add_collection(pc)

    ## 绘制误差线
    artists = ax.errorbar(xdata, ydata, xerr=xerror, yerr=yerror,
                          fmt='none', ecolor='k')

    return artists

创建图形和坐标轴

现在我们将使用 plt.subplots() 为箱线图创建图形和坐标轴。

## 创建图形和坐标轴
fig, ax = plt.subplots(1)

调用函数创建误差框

现在我们将调用 make_error_boxes() 函数在我们的图表上创建误差框。

## 调用函数创建误差框
_ = make_error_boxes(ax, x, y, xerr, yerr)

显示图表

最后,我们将使用 plt.show() 来显示图表。

plt.show()

总结

在本实验中,我们学习了如何使用 Matplotlib 中的 PatchCollection 从误差线创建箱线图。通过添加一个由 x 和 y 方向上的误差线限制定义的矩形补丁,我们能够创建一个更具视觉吸引力的误差线图。