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

R ggplot2使用ggsignif标注分日期组内亚组间的显著性差异

R ggplot2双因子分组下按日期标注亚组显著性实现方案

你当前的代码默认对所有日期混合计算Entfernung两个水平的整体差异,若要按日期分别计算并标注对应亚组的差异,可选择以下两种实现方式:

方案1:分面展示(推荐)

该方案逻辑简单,代码易维护,每个日期的差异结果独立展示可读性更高:

library(tidyverse)
library(ggsignif)

df %>%
  ggplot(aes(Entfernung, DGUnkraut, fill = Datum)) +
  geom_boxplot() +
  geom_signif(
    comparisons = list(c("2","5")), 
    map_signif_level = TRUE,
    tip_length = 0.01
  ) +
  # 按日期分面,每个分面单独计算亚组显著性
  facet_wrap(~Datum)

方案2:同画布并列展示

如果需要保留所有日期在同一画布,Entfernung水平下不同日期箱线并列的布局,可使用如下代码,标注会和对应日期的箱线颜色保持一致:

library(tidyverse)
library(ggsignif)

# 提前定义位置参数
date_levels <- levels(df$Datum)
n_dates <- length(date_levels)
pos_offset <- seq(-0.3, 0.3, length.out = n_dates)
max_y <- max(df$DGUnkraut, na.rm = TRUE)

df %>%
  ggplot(aes(Entfernung, DGUnkraut, color = Datum)) +
  geom_boxplot(position = position_dodge(width = 0.8)) +
  # 批量给每个日期组添加显著性标注
  purrr::walk2(pos_offset, date_levels, function(offset, date){
    col_idx <- which(date_levels == date)
    geom_signif(
      data = ~filter(.x, Datum == date),
      comparisons = list(c("2","5")),
      map_signif_level = TRUE,
      y_position = max_y + 0.5 + col_idx * 0.8,
      tip_length = 0.01,
      xmin = 1 + offset,
      xmax = 2 + offset,
      color = scales::hue_pal()(n_dates)[col_idx]
    )
  })

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:54:11