使用缺口形状时 matplotlibs 箱线图的奇怪行为

2023-11-24

我遇到一些奇怪的行为matplotlib's boxplot当我使用“notch“形状。我正在使用一些我不久前编写的代码,但从未遇到过这些问题——我想知道问题是什么。有什么想法吗?

weird behaviour on notched boxplots

当我关闭凹口形状时,它看起来很正常

unnotched boxplots look normal

这将是代码:

def boxplot_modified(data):

    fig = plt.figure(figsize=(8,6))
    ax = plt.subplot(111) 

    bplot = plt.boxplot(data, 
            #notch=True,          # notch shape 
            vert=True,           # vertical box aligmnent
            sym='ko',            # red circle for outliers
            patch_artist=True,   # fill with color
            )   

    # choosing custom colors to fill the boxes
    colors = 3*['lightgreen'] + 3*['lightblue'], 'lightblue', 'lightblue', 'lightblue']
    for patch, color in zip(bplot['boxes'], colors):
        patch.set_facecolor(color)

    # modifying the whiskers: straight lines, black, wider
    for whisker in bplot['whiskers']:
        whisker.set(color='black', linewidth=1.2, linestyle='-')    

    # making the caps a little bit wider 
    for cap in bplot['caps']:
        cap.set(linewidth=1.2)

    # hiding axis ticks
    plt.tick_params(axis="both", which="both", bottom="off", top="off",  
            labelbottom="on", left="off", right="off", labelleft="on")

    # adding horizontal grid lines 
    ax.yaxis.grid(True) 

    # remove axis spines
    ax.spines["top"].set_visible(False)  
    ax.spines["right"].set_visible(False) 
    ax.spines["bottom"].set_visible(True) 
    ax.spines["left"].set_visible(True)

    plt.xticks([y+1 for y in range(len(data))], 8*['x'])

    # raised title
    #plt.text(2, 1, 'Modified',
    #     horizontalalignment='center',
    #     fontsize=18)

    plt.tight_layout()
    plt.show()

boxplot_modified(df.values)

当我在没有自定义的情况下制作普通图时,问题仍然出现:

def boxplot(data):

    fig = plt.figure(figsize=(8,6))
    ax = plt.subplot(111) 

    bplot = plt.boxplot(data, 
            notch=True,          # notch shape 
            vert=True,           # vertical box aligmnent
            sym='ko',            # red circle for outliers
            patch_artist=True,   # fill with color
            )   

    plt.show()
boxplot(df.values)

notch plot without customization still looks weird


好吧,事实证明,这实际上是一个正确的行为;)

From 维基百科:

缺口箱线图在中位数周围应用“缺口”或箱形变窄。缺口对于提供中位数差异显着性的粗略指导很有用;如果两个盒子的缺口不重叠,这提供了中位数之间存在统计显着差异的证据。凹口的宽度与样品的四分位距成正比,与样品尺寸的平方根成反比。然而,最合适的乘数存在不确定性(因为这可能会根据样本方差的相似性而变化)。一种约定是使用 +/-1.58*IQR/sqrt(n)。

这也曾在一次讨论中讨论过GitHub 上的问题; R 产生类似的输出作为此行为“正确”的证据。

因此,如果我们在缺口箱图中出现这种奇怪的“翻转”外观,则仅意味着第一个四分位数的值低于平均值的置信度,反之亦然。虽然它看起来很难看,但它实际上是有关中位数置信度的有用信息。

自举(随机抽样和替换来估计抽样分布的参数,此处:置信区间)可能会减少这种影响:

来自plt.boxplot文档:

bootstrap :无(默认)或整数 指定是否引导置信区间 围绕有缺口箱线图的中位数。如果引导==无, 不执行自举,并计算陷波 使用基于高斯的渐近近似(参见 McGill, R., Tukey, J.W. 和 Larsen, W.A.,1978 年,以及 Kendall 和 Stuart, 1967)。否则,bootstrap指定次数 自举中位数以确定其 95% 置信区间。 建议使用 1000 到 10000 之间的值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用缺口形状时 matplotlibs 箱线图的奇怪行为 的相关文章

随机推荐

  • 实施 Apple 推送通知时出现 SSL 错误

    我正在尝试使用 python 和 django 实现 Apple 推送通知 我正在使用以下库来实现它 http leepa github com django iphone push 这是我创建发送消息的代码 from django htt
  • 安装 hashLib 会出现 SyntaxError: Missing Parentheses in call to 'print'

    我需要一个简单的密码哈希函数 并认为我可以使用hashlib PyCharm 建议通过运行来安装它pip install hashLib 但现在 PyCharm 抱怨库中存在语法错误 Collecting hashLib Using cac
  • 如何在reactjs解决方案中集成Youtube Iframe api

    在反应中 我试图为自定义 YouTube 播放器创建一个组件 以便我可以引入一个新的播放器控制栏 在 youtube iframe API 中 提到使用以下代码来创建播放器实例 var tag document createElement
  • 确定 java 应用程序在 Eclipse 中是否处于调试模式

    我想根据我是否在调试来更改日志记录级别 但我找不到代码片段来检查应用程序是否在调试模式下运行 我正在使用 Eclipse 来调试应用程序 因此如果解决方案仅在 Eclipse 中运行 那就没问题了 找到了答案如何查找调试模式是否已启用 bo
  • 在发出请求之前,Rspec 2.7 访问规范中的控制器会话

    我正在使用 Rspec 测试我的控制器 在向路径发出请求之前 我似乎无法设置当前测试控制器的会话变量 例如这有效 describe GET controller path do it if not matching CRSF should
  • MySQL——使用Python连接不同服务器上的数据库?

    In MySQL 我有两个不同的数据库 我们称它们为A and B 数据库A驻留在服务器上server1 而数据库B驻留在服务器上server2 两台服务器 A B are 身体上彼此接近 但位于不同的机器上并且具有不同的连接参数 不同的用
  • 垂直居中响应图像

    我想知道是否有一种简单的方法可以垂直居中响应图像 请参考以下jsFiddle http jsfiddle net persianturtle yawTb 1 基本 HTML img class mobile title size src h
  • 验证用户名和电子邮件崩溃,无法插入到 firebase 数据库

    当这行代码给应用程序带来错误时 应用程序无法将任何数据插入数据库 ref child uid orderByChild username equalTo validateName addListenerForSingleValueEvent
  • Vaadin @Javascript:清除更新的 JS 文件的缓存

    我的应用程序中有一个 JavaScript 注释 用于从类路径加载 js 文件 现在我已经更新了文件并重新部署 本地 但我总是得到旧版本 我已经尝试重新加载所有内容 ctrl R ctrl F5 但这不起作用 而且我也不希望用户必须这样做
  • 为什么我们不能在类级别声明 var a = new List

    我知道我们不能在类级别做到这一点 但在方法级别我们总是可以做到这一点 var myList new List
  • Java 会话管理的最佳选择

    在 Java 中管理会话的最佳方法 我听说 cookie 不是可靠的选择 因为它们会存储到浏览器中并可以稍后访问 它是否正确 如果可能 请通过编码示例给出答案 其中最好的是 网址重写 服务器会在URL链接末尾添加一个附加参数 表单中的隐藏参
  • 如何在控制台的同一行上打印整数中的文本和值?

    这就是我所做的 但没有成功 int money Console Writeline Enter how much money you want money int Parse Console ReadLine Console Writeli
  • R 中的撤消命令

    我找不到 R 中撤消命令效果的内容 无论是在 R 简介还是在 R in a Nutshell 中 我对处理交互式图表时的撤消 删除特别感兴趣 您建议采用什么方法 您应该考虑采用不同的方法 这会导致可重现的 work 选择您喜欢且具有以下功能
  • 如何为域轴和范围轴设置相同的比例 JFreeChart

    我想创建类似于的极点 零图极 零图 它用于显示 IIR 和 FIR 滤波器属性 例如稳定性 类型 我的问题是 如何为两个轴设置相同的比例 而不是范围 我使用 ScatterPlot 绘制图表 JFreeChart chart ChartFa
  • SQL Server:在 UTC 和本地时间之间精确转换

    我在 SQL Server 2008 R2 数据库中有几列 需要将其从本地时间 SQL Server 所在的时区 转换为 UTC 我在 StackOverflow 上看到了很多类似的问题 但答案都无法在夏令时下正常工作 它们只考虑当前的差异
  • 异步执行多个任务并在 JavaScript 函数中返回第一个成功结果

    我必须编写一个 javaScript 函数 将一些数据返回给调用者 在该函数中 我有多种方法来检索数据 即 从缓存中查找 从 HTML5 LocalStorage 检索 从 REST 后端检索 奖励 将新鲜数据放回到缓存中 每个选项都可能需
  • postgres where 子句中的 JSONB

    I Have a data like this 所以我需要找出 id 203498 的所有行 我该如何为此编写查询 有帮助吗 使用 JSON 包含运算符 gt WHERE jsoncol gt id 203498
  • 对 ObservableCollection 进行排序 - 最好的方法是什么?

    我有一个 ObservableCollection 其中 MyData 是一个具有 4 个属性的类 即 int id 字符串名称 bool IsSelected 字符串 IsVisible 此 ObservableCollection 绑定
  • 将数据从 Amazon dynamoDB 加载到 redshift

    我们在生产中有一个正在不断更新的 DynamoDB 表 我们希望将所有记录从 dynamoDB 加载到 redshift 我们尝试使用复制命令 但由于新记录不断插入表中 因此复制命令将永远运行 我们想知道将数据从实时 dynamodb 加载
  • 使用缺口形状时 matplotlibs 箱线图的奇怪行为

    我遇到一些奇怪的行为matplotlib s boxplot当我使用 notch 形状 我正在使用一些我不久前编写的代码 但从未遇到过这些问题 我想知道问题是什么 有什么想法吗 当我关闭凹口形状时 它看起来很正常 这将是代码 def box