查看: 307|回复: 0

DataFrame.boxplot 箱线图灰框解决与参数

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式
pandas 的 DataFrame.boxplot 可以直接对 DataFrame 画箱线图,底层仍依赖 matplotlib。它自身负责列选择、分组、字体、旋转、网格、图形尺寸、布局和返回类型,其他关键字会通过 **kwds 传给 matplotlib.pyplot.boxplot。原文记录了一次 Jupyter 画图时右上角出现灰色小框的问题,最终通过调整图像尺寸解决。下面把参数和排查过程整理成可复用的写法。

一、DataFrame.boxplot 的基础参数
调用签名如下:
  1. DataFrame.boxplot(column=None,
  2.                    by=None,
  3.                    ax=None,
  4.                    fontsize=None,
  5.                    rot=0,
  6.                    grid=True,
  7.                    figsize=None,
  8.                    layout=None,
  9.                    return_type=None,
  10.                    **kwds)
复制代码
参数含义:
column:str 或 str 列表,可选列名、名称列表或向量,可以是 pandas.DataFrame.groupby() 的有效输入。
by:str 或 array-like,可选,用于按 DataFrame 中的列分组,箱线图会按每列的值绘制。
ax:matplotlib.axes.Axes 对象,可选,指定 boxplot 使用的 matplotlib 轴。
fontsize:float 或 str,用于标签字体大小,也可以使用“大”这类字符串标记。
rot:int 或 float,默认 0,表示标签相对屏幕坐标系的旋转角度。
grid:布尔值,默认 True,设为 True 显示网格。
figsize:以英寸为单位的元组(宽度,高度),用于设置 matplotlib 创建的图形大小。
layout:元组(行,列),例如 (3,5) 会从左上角开始使用 3 列和 5 行显示子图。
return_type:{'axes','dict','both'} 或 None,默认 'axes'。'axes' 返回绘制 boxplot 的 matplotlib 轴;'dict' 返回一个字典,其值是 boxplot 的 matplotlib 行;'both' 返回带有轴和 dict 的 namedtuple。按 by 分组时,return_type 会返回一系列映射列。若 return_type 为 None,layout 会返回具有相同形状的 NumPy 轴阵列。
**kwds:传递给 matplotlib.pyplot.boxplot() 的其他绘图关键字参数。

二、额外可用的箱线图参数
除了 DataFrame.boxplot 自身列出的参数,原文还对比发现可以直接使用底层箱线图参数,例如:
  1. DataFrame.boxplot(sym='.',
  2.                    vert=True,
  3.                    whis=1.5,
  4.                    patch_artist=True,
  5.                    meanline=False,
  6.                    showmeans=True,
  7.                    showcaps=True,
  8.                    notch=False,
  9.                    return_type='dict')
复制代码
这些参数的含义如下:
sym:异常点形状。
vert:是否垂直,False 为横向箱线图,True 为竖向箱线图。
whis:默认 1.5,也可以设置区间,例如 [5,95],表示强制上下边缘为数据 95% 和 5% 的位置。
patch_artist:上下四分位框内是否填充,True 表示填充。
meanline:是否用线的形式表示均值,默认用点表示。
showmeans:是否显示均值,默认不显示。
shoubox(即 showbox):是否显示边缘线,箱线图顶端和末端的两条线默认显示。
showfliers:是否显示异常值。
notch:中间箱体是否缺口。
return_type:返回类型。
positions:指定箱线图的位置。
widths:指定箱线图的宽度,默认为 0.5。

三、右上角灰色小框问题
原文在 Jupyter 中绘制箱线图时使用如下代码:
  1. plt.figure(figsize=(11.5, 6.5))
  2. cop_df.boxplot(showmeans=True, fontsize=8, notch=True, sym='.', grid=False)
复制代码
现象是图中右上角出现一个灰色小框,原文没有说明这个灰色小框的具体成因。随后作者调整图像大小,代码如下:
  1. plt.figure(figsize=(9.5, 6.5))
  2. df.boxplot(showmeans=True, fontsize=7, notch=True, sym='.', grid=False)
复制代码
这段解决代码中的参数含义为:showmeans=True 显示平均值,默认为三角形;fontsize=7 设置坐标轴字体大小;notch=True 设置箱体中位线处收回;sym='.' 把异常点形状设置为小圆点;grid=False 去掉图中的网格。需要注意的是,原文的解决代码同时把 figsize 从 (11.5,6.5) 调成 (9.5,6.5),并把 fontsize 从 8 调成 7,因此这是参数组合调整,不是对单一参数的严格对照实验。复现问题时可以优先检查 figsize 和 fontsize,再结合 showmeans、notch、sym、grid 等参数逐步调整。

四、调用时如何理解返回类型
如果后续还要对图形对象做处理,return_type 很关键。需要拿到 matplotlib 轴时用 'axes';需要拿到箱线图各行对象时用 'dict';同时需要轴和字典时用 'both'。按 by 分组时,返回结构会随 return_type 变化。若传入 layout 且 return_type 为 None,则会返回同形状的 NumPy 轴阵列。这也是 DataFrame.boxplot 与直接调用 matplotlib.pyplot.boxplot 时容易混淆的地方:前者是 DataFrame 的封装方法,后者是底层绘图函数,**kwds 正是两者之间的透传入口。

总结:DataFrame.boxplot 的参数可以分成两类,一类控制 DataFrame 列、分组、字体、旋转、网格、figsize、layout 和返回类型,另一类透传给 matplotlib.pyplot.boxplot,包括 sym、vert、whis、patch_artist、meanline、showmeans、showcaps、showfliers、notch、positions、widths 等。原文遇到右上角灰色小框时,通过把 figsize 改为 (9.5,6.5)、fontsize 改为 7 的组合方式解决;实际调试时建议保留完整参数,逐一调整验证。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-9-22 12:35 , Processed in 0.021453 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部