1. 从看懂到动手:箱形图的核心要素再梳理
上次我们聊了箱形图的基础,知道了那条线是中位数,那个箱子是四分位距,还有伸出去的“须”和偶尔冒出来的“点”。但说实话,光看懂还不够,真到自己动手画,尤其是想画得既专业又好看,能直接放进论文或报告里时,就会发现默认生成的图总差点意思。要么颜色太单调,分不清组别;要么异常值标记太小,在PPT里根本看不清;又或者想在一张图里同时展示中位数和均值,却不知道如何下手。
别急,这正是我们今天要解决的。箱形图绝不是一个“一键生成”就结束的图表,它更像是一个等待你精心调校的仪表盘。每一个视觉元素——箱体的填充色、边框的粗细、中位线的样式、“须”的形态,乃至异常点的标记符号——都在向读者传递着特定的信息。高级定制的目的,就是让你能精准控制这些信息,让图表替你说话,清晰、有力、美观。
我们先快速回顾并深化一下几个关键概念,因为这是所有定制操作的基础。中位数那条线,是数据的“脊梁”,它不受极端值影响,能稳健地反映数据中心位置。四分位距(IQR),也就是箱子的高度,是数据中间50%的分布范围,它衡量了数据的离散程度。IQR越小,说明中间的数据越集中。而**“须”,通常默认延伸到不超过1.5倍IQR范围内的最远端数据点。这个1.5倍IQR是一个经验规则,也是识别异常值**的门槛。在定制时,你可以调整这个倍数,比如在金融数据中,为了更严格地筛选异常值,可能会使用3倍IQR。
理解这些,你就知道调整哪里会影响图表表达的统计含义。比如,你加粗了中位线,就是为了强调数据的中心趋势;你把箱体填充为不同的颜色,是为了在比较多个分组时,让读者一眼就能区分。接下来,我们就进入实战环节,看看在Python的Matplotlib和Seaborn,以及MATLAB中,如何一步步实现这些高级定制。
2. Python实战:用Matplotlib进行像素级控制
Matplotlib是Python绘图的基石,它提供了最底层、最精细的控制能力。虽然Seaborn能让你用更少的代码画出更漂亮的统计图形,但当你需要实现一些非常特殊的定制需求时,回到Matplotlib往往是唯一的选择。我们先从最核心的plt.boxplot()函数讲起。
当你调用plt.boxplot(data)时,它返回一个字典,里面包含了所有图形元素的句柄。这是定制的钥匙。这个字典通常包含这些键:boxes(箱体列表)、medians(中位数线列表)、whiskers(须线列表)、caps(须线顶端横杠列表)、fliers(异常值点列表)和means(如果需要显示均值的话)。拿到这些句柄,你就可以对它们进行循环遍历,逐一设置属性。
举个例子,假设我们有三组数据要比较,你想把每组箱体的颜色设为不同。基础做法是设置patch_artist=True(这样箱体才能填充颜色),然后通过boxprops参数传递一个包含facecolor属性的字典。但如果你想对每个箱子单独设置更复杂的颜色,比如渐变色,就需要在绘图后,通过返回的句柄来操作。
import matplotlib.pyplot as plt
import numpy as np
# 生成三组示例数据
np.random.seed(42)
data_group1 = np.random.normal(100, 15, 200)
data_group2 = np.random.normal(120, 20, 200)
data_group3 = np.random.normal(90, 10, 200)
data = [data_group1, data_group2, data_group3]
# 绘制箱形图,并获取所有元素句柄
fig, ax = plt.subplots(figsize=(10, 6))
boxplot_dict = ax.boxplot(data, patch_artist=True, showmeans=True, meanline=True)
# 1. 自定义每个箱体的颜色
colors = ['#FF6B6B', '#4ECDC4', '#45B7D1']
for patch, color in zip(boxplot_dict['bo

638

被折叠的 条评论
为什么被折叠?



