您的位置:首页 >Python箱线图怎么画?boxplot分析数据分布与异常值
发布于2026-03-17 阅读(0)
扫一扫,手机访问
plt.boxplot()画箱线图需注意:数据为list of arrays;vert=False实现横向布局;NaN自动跳过需手动检查;宽度反映样本量需手动计算widths;勿混用sns.boxplot();异常值阈值固定为1.5×IQR;中文标签须全局配置rcParams。

plt.boxplot() 画基础箱线图,别漏掉 vert=False默认竖着画,但横向更适配多组并排比较或标签长的场景。不加 vert=False,强行旋转坐标轴反而容易错位、刻度对不齐。
[data_a, data_b, data_c]),不是单个 array;传单个会画成一根线,不是“多组对比”NaN,plt.boxplot() 默认跳过,但不会报错——看着图正常,实际样本量已缩水,得先用 np.isnan() 检查patch_artist=True + widths= 参数,原生不支持自动缩放ax.boxplot() 和 sns.boxplot() 别混用同一张图前者是 matplotlib 原生命令,后者底层重绘了 artist,混用会导致 ax.set_xticklabels() 失效、异常值点重复渲染、甚至 plt.show() 卡住。
ax.boxplot():适合需要精细控制每个箱子颜色、线条粗细、异常值标记样式的场景,比如论文插图sns.boxplot():适合快速看分组趋势,自动处理分类变量 x 轴,但传入的 DataFrame 列名必须是字符串,不能是 int 或 Noneshowfliers=False 隐藏异常值点,但 sns 还要额外设 flierprops={'markersize': 0} 才彻底不占空间plt.boxplot() 和 sns.boxplot() 全部硬编码使用 Q1 - 1.5×IQR 和 Q3 + 1.5×IQR,没参数可调。想换阈值(比如用 3×IQR 或标准差法),只能自己算出上下界,再用 plt.scatter() 手动标点。
bp = ax.boxplot(...); print(bp['fliers'][0].get_ydata()),注意返回的是屏幕坐标,不是原始数据值q1, q3 = np.percentile(data, [25, 75]); iqr = q3 - q1; mask = (data < q1 - 1.5*iqr) | (data > q3 + 1.5*iqr)plt.rcParams 初始化不是每次画图都临时设 font.sans-serif,而是在 import 后立刻全局配置,否则子图、图例、坐标轴文字可能部分失效。
plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['font.size'] = 12
plt.savefig(..., dpi=300, bbox_inches='tight'),漏掉 bbox_inches 会导致中文标签被截断字体、坐标轴、异常值逻辑这三块最容易在调试后期才暴露,尤其当数据量变大或换环境运行时——不是代码错了,是默认行为和你预期不一致。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9