如何移除ggpairs分组后右上角的整体corr:***标注?
解决ggpairs分组后右上角显示整体相关性标注的问题
方法一:自定义上三角面板函数(推荐)
通过替换默认的ggally_cor函数,让上三角仅显示分组内的相关系数与显著性,从根源上避免生成整体标注:
library(GGally) library(ggplot2) library(dplyr) # 自定义分组相关性绘图函数 custom_group_cor <- function(data, mapping, ...) { group_col <- as.character(mapping$colour) if (is.null(group_col)) { return(ggally_cor(data, mapping, ...)) } # 按分组计算相关系数与显著性 group_cors <- data %>% group_by(.data[[group_col]]) %>% summarise( corr = round(cor(.data[[as.character(mapping$x)]], .data[[as.character(mapping$y)]]), 2), p_val = cor.test(.data[[as.character(mapping$x)]], .data[[as.character(mapping$y)]])$p.value, .groups = "drop" ) %>% mutate( sig = case_when( p_val < 0.001 ~ "***", p_val < 0.01 ~ "**", p_val < 0.05 ~ "*", TRUE ~ "" ), label = paste0(.data[[group_col]], "\ncorr: ", corr, sig) ) # 绘制分组标注文本 ggplot(data, mapping) + annotate( "text", x = mean(data[[as.character(mapping$x)]]), y = mean(data[[as.character(mapping$y)]]), label = paste(group_cors$label, collapse = "\n\n"), color = unique(data[[group_col]]) ) + theme_void() } # 调用示例(以iris数据集分组为例) ggpairs( iris, columns = 1:4, aes(color = Species), upper = list(continuous = custom_group_cor) )
方法二:修改已生成的ggpairs对象
如果已经生成了带整体标注的图,可以直接删除对应面板的标注图层:
# 生成默认分组ggpairs图 p <- ggpairs(iris, columns = 1:4, aes(color = Species)) # 定位右上角整体标注所在的面板(以4列数据为例,面板位置为[1,4],行1列4) target_panel <- p$plots[[1,4]] # 删除面板中的文本标注图层 target_panel$layers <- target_panel$layers[-which(sapply(target_panel$layers, function(l) l$geom == "text"))] # 替换原面板并绘图 p$plots[[1,4]] <- target_panel print(p)
注意:面板位置需根据你的数据列数调整,比如3列数据的右上角面板是
[1,3],以此类推。
内容的提问来源于stack exchange,提问作者Breeze
相关产品推荐
相关产品推荐

