绘图框 p 值显着性注释

2023-12-03

我已经开始使用并喜欢绘制箱线图来表示我的数据。然而,我很难找到一种方法来对比这两个群体。使用Plotly时有没有办法引入数据之间的统计显着性比较?我想创建这样的图表:

enter image description here

其中 * 对应于 p 值 0.05。 我发现使用scipy.stats.ttest_ind() and stats.ttest_ind_from_stats()人们可以轻松找到两个分布的 p 值。

我在网上没有找到任何相关的帖子,我认为这是一个相当有用的实现,所以任何帮助将不胜感激!


如果有人觉得有帮助,我写了这个函数add_p_value_annotation。它创建一个括号注释并用星号指定两个箱线图之间的 p 值。当你的图中有子图时它也应该起作用。

def add_p_value_annotation(fig, array_columns, subplot=None, _format=dict(interline=0.07, text_height=1.07, color='black')):
    ''' Adds notations giving the p-value between two box plot data (t-test two-sided comparison)
    
    Parameters:
    ----------
    fig: figure
        plotly boxplot figure
    array_columns: np.array
        array of which columns to compare 
        e.g.: [[0,1], [1,2]] compares column 0 with 1 and 1 with 2
    subplot: None or int
        specifies if the figures has subplots and what subplot to add the notation to
    _format: dict
        format characteristics for the lines

    Returns:
    -------
    fig: figure
        figure with the added notation
    '''
    # Specify in what y_range to plot for each pair of columns
    y_range = np.zeros([len(array_columns), 2])
    for i in range(len(array_columns)):
        y_range[i] = [1.01+i*_format['interline'], 1.02+i*_format['interline']]

    # Get values from figure
    fig_dict = fig.to_dict()

    # Get indices if working with subplots
    if subplot:
        if subplot == 1:
            subplot_str = ''
        else:
            subplot_str =str(subplot)
        indices = [] #Change the box index to the indices of the data for that subplot
        for index, data in enumerate(fig_dict['data']):
            #print(index, data['xaxis'], 'x' + subplot_str)
            if data['xaxis'] == 'x' + subplot_str:
                indices = np.append(indices, index)
        indices = [int(i) for i in indices]
        print((indices))
    else:
        subplot_str = ''

    # Print the p-values
    for index, column_pair in enumerate(array_columns):
        if subplot:
            data_pair = [indices[column_pair[0]], indices[column_pair[1]]]
        else:
            data_pair = column_pair

        # Mare sure it is selecting the data and subplot you want
        #print('0:', fig_dict['data'][data_pair[0]]['name'], fig_dict['data'][data_pair[0]]['xaxis'])
        #print('1:', fig_dict['data'][data_pair[1]]['name'], fig_dict['data'][data_pair[1]]['xaxis'])

        # Get the p-value
        pvalue = stats.ttest_ind(
            fig_dict['data'][data_pair[0]]['y'],
            fig_dict['data'][data_pair[1]]['y'],
            equal_var=False,
        )[1]
        if pvalue >= 0.05:
            symbol = 'ns'
        elif pvalue >= 0.01: 
            symbol = '*'
        elif pvalue >= 0.001:
            symbol = '**'
        else:
            symbol = '***'
        # Vertical line
        fig.add_shape(type="line",
            xref="x"+subplot_str, yref="y"+subplot_str+" domain",
            x0=column_pair[0], y0=y_range[index][0], 
            x1=column_pair[0], y1=y_range[index][1],
            line=dict(color=_format['color'], width=2,)
        )
        # Horizontal line
        fig.add_shape(type="line",
            xref="x"+subplot_str, yref="y"+subplot_str+" domain",
            x0=column_pair[0], y0=y_range[index][1], 
            x1=column_pair[1], y1=y_range[index][1],
            line=dict(color=_format['color'], width=2,)
        )
        # Vertical line
        fig.add_shape(type="line",
            xref="x"+subplot_str, yref="y"+subplot_str+" domain",
            x0=column_pair[1], y0=y_range[index][0], 
            x1=column_pair[1], y1=y_range[index][1],
            line=dict(color=_format['color'], width=2,)
        )
        ## add text at the correct x, y coordinates
        ## for bars, there is a direct mapping from the bar number to 0, 1, 2...
        fig.add_annotation(dict(font=dict(color=_format['color'],size=14),
            x=(column_pair[0] + column_pair[1])/2,
            y=y_range[index][1]*_format['text_height'],
            showarrow=False,
            text=symbol,
            textangle=0,
            xref="x"+subplot_str,
            yref="y"+subplot_str+" domain"
        ))
    return fig

如果我们现在创建一个图形并测试该函数,我们应该得到以下输出。

from scipy import stats
import plotly.express as px
import plotly.graph_objects as go
import numpy as np

tips = px.data.tips()

fig = go.Figure()
for day in ['Thur','Fri','Sat','Sun']:
    fig.add_trace(go.Box(
        y=tips[tips['day'] == day].total_bill,
        name=day,
        boxpoints='outliers'
    ))
fig = add_p_value_annotation(fig, [[0,1], [0,2], [0,3]])
fig.show()

enter image description here

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

绘图框 p 值显着性注释 的相关文章

  • ImportError:LinuxMint17.3 中“没有名为plotly.plotly 的模块”

    每当我尝试编译以下代码以获得折线图时 都会显示一些错误 但我不知道如何解决它 这是我的code https plot ly python line charts import plotly plotly as py import plotl
  • 如何使用在单击按钮上创建的用户触发图表中的放大和缩小?

    我正在构建一个角度应用程序 其中我们需要创建用于放大和缩小图表的单击按钮 我们可以使用可悬停模式栏上的按钮放大缩小图表 但这对于我们的应用程序来说不是必需的 我们希望使用通过单击按钮创建的用户来放大和缩小图表 有没有办法使用单击按钮触发可悬
  • 使用python在scattermapbox中围绕点绘制多边形

    我在用散点图箱 https plotly com python scattermapbox 在地图上绘制点 我想画出覆盖的多边形 x milePOI 的半径 dcc Graph id map graph application callba
  • 如何使用plotlyexpress添加置信区间fillcontour?

    我正在使用plotlyexpress 添加趋势线 现在如何像seaborn regplot 中那样绘制置信区间 df px data tips fig px scatter df x total bill y tip trendline o
  • 如何在 Plotly 中旋转绘图的轴?

    我在 Plotly 中完成了以下情节 如您所见 X Y 轴采用传统方式 如何旋转轴 使 X 垂直绘制 Y 水平绘制 向左 我还想修改每个轴的范围和间距 我想它必须对布局元素做一些事情 我的代码到目前为止 layout go Layout t
  • 是否有 R 函数将 p.value 转换为显着性代码?

    summary显示 p values 的显着性代码 是否有 R 函数将 p value 转换为显着性代码 例如 0 02 gt 和 0 005 gt Use symnum如下所示 symnum了解更多信息 p values lt c 9 5
  • 在单个图中,由“标签”列分割的所有列的箱线图

    看着箱线图 API 页面 http seaborn pydata org generated seaborn boxplot html seaborn boxplot 我想要看起来像这样的组合的东西 gt gt gt iris sns lo
  • 从滑块输入数据以更改标记颜色

    感谢对此任务的任何帮助 我试图让这个破折号应用程序采用滑块输入值来通过函数更改变量 然后仅更改标记颜色变量 该代码是用 python 编写的 并使用了plotly dash 和plotly 以及pandas numpy 和mapbox 代码
  • Python ggplot 和 ggplotly

    前 R 用户 我曾经通过 ggplotly 函数广泛组合 ggplot 和plot ly 库来显示数据 刚接触 Python 时 我看到 ggplot 库可用 但找不到与用于图形反应显示的绘图简单组合的任何内容 我想要寻找的是这样的 fro
  • Plotly 中所有地理范围的列表

    我正在尝试使用在地图上绘制数据plotly js 我知道您可以通过以下方式获得一个国家的地图 layout dict title geo dict scope usa 我们有可用范围的列表吗 不同的地区 某个地方 我尝试过谷歌搜索但似乎找不
  • 有没有办法离线将多个 Plotly HTML 文件合并/嵌入到一个页面/HTML 文件中?

    我正在尝试将多个图表合并成一个 HTML 报告来发送 问题是我真的不认为子图是最好的主意 因为图表相对不相关 不同的 X Y 轴 我所需要做的只是将图表附加到 1 个 HTML 文件中 有一个指南解释了如何使用绘图 URL 来完成此操作 但
  • Jupyter笔记本情节不显示图表..(仅图表)[重复]

    这个问题在这里已经有答案了 在 jupyter 笔记本中 我的代码确实运行 只是不显示图形 我尝试过很多方法 我的示例代码 图片 我的代码和图片 import plotly offline as pyo import plotly grap
  • 在箱线图中添加多条水平线

    我知道我可以使用类似命令向箱线图添加一条水平线 abline h 3 当单个面板中有多个箱线图时 我可以为每个箱线图添加不同的水平线吗 在上图中 我想为 1 添加行 y 1 2 为 2 添加行 y 1 5 为 3 添加行 y 2 1 我不确
  • 在 Plotly Density_Mapbox 上添加 GeoJSON 等高线作为图层

    我想在上面添加天气轮廓plotly density mapbox地图 但我不确定必要的步骤 首先 我创建了一个matplotlib等值线图以可视化数据 然后 我用了geojsoncontour创建一个geojson文件来自所说matplot
  • Plotly:如何制作 3D 堆叠直方图?

    我有几个成功绘制的直方图plotly https plot ly python 像这样 fig add trace go Histogram x np array data key name self labels i 我想创建类似的东西这
  • Plotly 绘图不会在 RMarkdown 文档的 for 循环内渲染

    我正在尝试动态构建一个需要运行循环的报告 并为每次迭代打印一些消息 表格和绘图 我可以让一切正常运转except为了情节 示例 rmd r echo FALSE results asis fig keep all message FALSE
  • Jupyter Lab 中未渲染 Plotly Express

    以下代码不会在 Jupyter 实验室中呈现 matplotlib widget import plotly express as px import numpy as np import pandas as pd df pd DataFr
  • x[floor(d)] + x[ceiling(d)] 中的错误:二元运算符的非数字参数

    我试图绘制病毒载量和试验组的简单箱线图 但不断收到此错误 x floor d x ceiling d 中的错误 二元运算符的非数字参数 dataset PatientID trial arm viral load 1 club 19 2 c
  • 如何在时间序列图中添加和定义多条线?

    我正在使用 python 的plotly 库创建一个基于线的时间序列图 我想将其连接到时间序列数据库 但目前我一直在使用 csv 数据进行测试 是否有可能有一个x and y轴 时间与值 并从另一个 csv 列值 主机 加载多行并附加到 x
  • 用plotly创建丝带

    我需要在散点图上绘制加速度与英里 加仑的两个斜率 轻型汽车一处斜坡 重型汽车一处斜坡 我创建了这个 cars light lt cars log cars log log weight lt log mean cars weight car

随机推荐

  • 为什么lxml在解析时关闭这个“ol”标签?

    这是一些 HTML ol ul li item li ul ol 和一些 python 3 代码lxml解析它并重新打印它 import sys from lxml import etree html document root html
  • 未捕获绘图尺寸无效,图表 api 的宽度 = null,高度 = null

    我正在使用流程图 API 来显示图表 并且成功绘制了数据 我在一页中加载大约 30 个图表 并在 ui tabs 中渲染它们 所有图表都完美渲染 页面工作正常 但我仍然收到此错误 我对所有图表使用了不同的 div id 为所有 div 指定
  • 如何在鼠标悬停(悬停)时更改图像

    如何更改图像 使用设置 img 标签 这不是 div or div
  • Java 处理 if null then new 的不同方法

    好的 我有一个关于处理空值的问题 这个问题很大程度上取决于意见 因此我将询问优点和缺点 假设我有一个可以返回 null 或 JSONArray 的函数 我总是想要一个 JSONArray 因此如果函数的结果为 null 我希望它创建一个空的
  • 按位置查找未标记的模板选项/参数/参数

    简而言之 我想从可变参数模板参数中提取各种选项 但不仅通过标签 还通过这些参数的索引 这些参数没有known标签 我喜欢 boost 中的方法 例如heap or lockfree政策 但希望使其兼容STL容器 分配器参数 Preface
  • 如何使用 jQuery 选择文本

    如何通过 jQuery 选择部分文本并进行处理 例如 我有一个文本 div This is an example text here div 我用鼠标选择几个单词 不是整个 div 并想显示这些单词 部分 test in div div 如
  • 通过 EQ 过滤删除元素不会从 jQuery 对象中删除该元素

    我使用此代码来匹配元素列表 var previewItems preview find items children not heads 一切工作正常 但是当我尝试通过选择其中一个项目的 EQ 来删除它时 在它从 DOM 中删除后 它保留在
  • 如何将数组缓冲区转换为字符串

    我在 node js 上编写了一个简单的 TCP 服务器 用于将一些数据发送到 Chrome 应用程序 在 Chrome 应用程序中 当我获取数据时 我使用下面的函数将其转换为字符串 但出现异常 Uint16Array 的字节长度应该是 2
  • 生产服务器上的.net调试[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我和我的团队第一次致力于 net Web 应用程序项目 我们想知道在生产服务器上调试问题的最有效方法 目前 我们通过 ftp 将工作上传到客户的生产服务器 由于我们的背景是 LA
  • 使用 SafetyNet Attestation API 在 Android 中进行安全环境检查无法正常工作,因为它无法在成功或失败回调时获得回调

    对于我正在使用的 android 中的安全环境检查 https developer android com training safetynet attestation html SafetyNet getClient this attes
  • 如何在 Windows 10 上安装 OpenXML SDK 生产力工具 2.5

    我从以下位置下载了 OpenXML SDK Productivity Tool 2 5微软网站 然而 当我想安装它时 我被告知我需要先安装 NET Framework 4 如果没有它 安装将无法继续 我已经安装了 NET Framework
  • 创建后更改可观察的间隔/设置

    在 RxJS 中 创建后如何更改间隔设置 到目前为止我有这个 但它不起作用 var observable Rx Observable interval 500 map function data return Hello World dat
  • 如何使用基于声明的授权保护asp.net core 2.1中的静态文件夹

    我有一个使用 asp net core 2 1 的小项目 我希望保护充满静态资产的文件夹 我尝试实现的是基于这篇文章https odetocode com blogs scott archive 2015 10 06 authorizati
  • 解决为什么 PrintWindow 为空白的问题

    我正在尝试使用 PrintWindow 捕获非活动窗口的屏幕截图 它适用于计算器和捕获 Google Chrome 但对于其他一些应用程序 例如游戏 它可以节省白色区域 PrintWindow 失败的原因可能是什么以及如何验证它们 编辑 我
  • CSS 模块的服务器端渲染

    我将导入样式CSS模块并使其与服务器端渲染一起使用 我尝试了以下方法 但每种方法都有其自己的警告 最好的方法是什么require style scss 是否有副作用 使用css 模块 require hook 优势 易于配置 您只需在服务器
  • 如何使用 c++ 11 使函数在所需的周期执行

    我想使用c 11来实现类似windows API的功能SetTimer 就像 每2秒做某事 假设你想让这个函数每 2 秒执行一次 void foo cout lt lt Hello from foo lt lt endl 您可以提供一个简单
  • Django:如何将 STATIC_URL 设为空?

    是的 我希望它像 Flask 框架一样工作 在那里我可以设置如下参数 static folder os getcwd static static url path 以及其中的所有文件 static files blabla bla可以通过以
  • Entity Framework Code First 和 SQL Server 2012 序列

    我正在实施数据库审计跟踪 通过 Web API 项目中的控制器执行的 CRUD 操作将序列化旧的和新的 poco 并存储它们的值以供以后检索 历史 回滚等 当我让一切正常工作时 我不喜欢它在 POST 期间让我的控制器看起来如何 因为我最终
  • cordova.file.*(所有目录)为空

    我正在从事 Ionic 移动应用程序开发 我的要求是创建客户端记录器来跟踪应用程序中的问题 我使用了中提到的方法https github com pbakondy filelogger 我可以在 Android 和 iOS 中创建日志文件
  • 绘图框 p 值显着性注释

    我已经开始使用并喜欢绘制箱线图来表示我的数据 然而 我很难找到一种方法来对比这两个群体 使用Plotly时有没有办法引入数据之间的统计显着性比较 我想创建这样的图表 其中 对应于 p 值 0 05 我发现使用scipy stats ttes