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

如何移除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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:07:15