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
相关产品推荐
相关产品推荐

