You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame绘图如何调整x/y轴缩放展示离群值

离群点场景下的坐标轴适配方案

针对大值离群点导致常规数据被压缩的问题,有三类成熟的调整方案,可按需选择:

  • 坐标轴截断(断轴,完全匹配刻度跳级需求)
    这是最贴合需求的方案:不需要修改原始数据,将存在大值离群点的坐标轴拆为两段,下段用90%左右的画布空间适配0-100的常规数据区间,保持正常刻度间距;上段仅预留10%左右的画布空间放置100000量级的离群点,两段衔接处用双斜杠截断标记明确提示刻度跳变,读者既能清晰分辨常规数据的分布,也能看到离群点的准确取值。
    以Python的matplotlib库为例,核心实现代码如下:
    import matplotlib.pyplot as plt
    # 按1:9的高度比例拆分上下两个共享x轴的绘图区
    fig, (ax_top, ax_bottom) = plt.subplots(2, 1, sharex=True, gridspec_kw={'height_ratios': [1, 9]})
    # 上段坐标轴范围适配离群点
    ax_top.set_ylim(99000, 101000)
    # 下段坐标轴范围适配常规数据
    ax_bottom.set_ylim(0, 110)
    # 隐藏两段衔接处的多余边框
    ax_top.spines['bottom'].set_visible(False)
    ax_bottom.spines['top'].set_visible(False)
    # 绘制截断标识
    mark_len = 0.015
    draw_params = dict(transform=ax_top.transAxes, color='black', clip_on=False)
    ax_top.plot((-mark_len, mark_len), (-mark_len, mark_len), **draw_params)
    ax_top.plot((1-mark_len, 1+mark_len), (-mark_len, mark_len), **draw_params)
    draw_params['transform'] = ax_bottom.transAxes
    ax_bottom.plot((-mark_len, mark_len), (1-mark_len, 1+mark_len), **draw_params)
    ax_bottom.plot((1-mark_len, 1+mark_len), (1-mark_len, 1+mark_len), **draw_params)
    
  • 非线性刻度适配
    如果不想拆分绘图区,可以直接对坐标轴做非线性变换:
    • 对数刻度:直接将对应轴切换为log尺度,可自动压缩大值区间的占比,注意零值需要加极小偏移量避免计算错误,调用方式为plt.yscale('log');缺点是会改变常规数据的视觉间距,对不熟悉对数轴的读者存在误读风险
    • 自定义分档刻度:0-100区间保持正常线性刻度,100以上单独设置「>100 离群值」的特殊刻度位,所有超阈值离群点统一绘制在该位置,适合不需要展示离群点精确取值、仅需标注离群点存在的场景
  • 主图+缩略图组合
    主图完全按0-100的常规数据范围设置坐标轴,保证99%的常规数据展示清晰;在图表边角位置添加一个缩小的全范围缩略子图,缩略图适配包含离群点的全量数据范围,用来提示离群点的存在和取值,不会干扰主图的阅读体验。

未做调整时受离群点影响的异常图表效果:

  • 箱线图:
    Box Plot
  • 散点图:
    Scatter Plot

注意:所有涉及刻度截断、非线性变换的调整,必须在图表上添加明确标识,避免读者误判数据比例关系。

内容的提问来源于stack exchange,提问作者newuser11111

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 11:51:23