Skip to content

增加跨组别显著性星号标注功能 #60

@RicardoRyn

Description

@RicardoRyn

功能概述

目前 plot_multi_group_bar_figure 函数只支持组内比较(即同一组内的不同柱子之间的显著性),但无法进行跨组别比较(不同组之间相同位置的柱子)。在神经科学研究中,经常需要比较不同实验组之间相同条件下的数据差异,因此跨组别显著性标注是一个非常重要的功能。

具体需求

希望扩展 plot_multi_group_bar_figure 函数,使其能够支持:

  1. 跨组别比较:能够在不同组的相同位置柱子之间添加显著性星号和连线
  2. 灵活的比较方式:支持任意两组之间的比较,而不仅仅是相邻组
  3. 自定义p值:允许用户传入预计算的p值用于显著性判断
  4. 样式定制:保持与现有显著性标注一致的样式控制选项(颜色、字体大小等)

API设计建议

建议在现有函数参数基础上,增加以下参数:

def plot_multi_group_bar_figure(
    # ... 现有参数 ...
    cross_group_comparisons: list[tuple[int, int, int]] | None = None,
    cross_group_p_values: list[float] | None = None,
    cross_group_line_color: str = "0.5",
    cross_group_asterisk_color: str = "k",
    cross_group_fontsize: int = 10,
    # ... 现有参数 ...
):

参数说明:

  • cross_group_comparisons: 列表,每个元素为三元组 (group1_index, group2_index, bar_index),表示要比较的两个组和柱子位置
  • cross_group_p_values: 对应的p值列表,用于确定是否显示显著性星号
  • cross_group_line_color: 跨组别连线的颜色
  • cross_group_asterisk_color: 跨组别星号的颜色
  • cross_group_fontsize: 跨组别星号的字体大小

示例用法

# 比较第0组和第2组的第1个柱子,以及第1组和第2组的第0个柱子
cross_comparisons = [
    (0, 2, 1),  # 比较组0和组2的第1个柱子
    (1, 2, 0)   # 比较组1和组2的第0个柱子
]
cross_p_values = [0.03, 0.01]  # 对应的p值

plot_multi_group_bar_figure(
    data=data,
    group_labels=group_labels,
    bar_labels=bar_labels,
    statistic=True,
    cross_group_comparisons=cross_comparisons,
    cross_group_p_values=cross_p_values,
    cross_group_line_color="red",
    cross_group_asterisk_color="red"
)

实现思路

  1. _annotate_significance 函数基础上,创建新的 _annotate_cross_group_significance 函数
  2. 根据 cross_group_comparisons 参数获取要比较的柱子的实际x坐标位置
  3. 计算合适的y轴高度来绘制连线和星号,避免与组内显著性标注重叠
  4. 使用与现有代码一致的星号生成逻辑(
  5. 确保跨组别标注不会与现有的组内标注冲突

这个功能将大大增强 plotfig 库在神经科学研究中的实用性,特别是在需要比较多组实验结果时。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions