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

如何在stat_cor的结果标签中添加分组变量vs的自定义标签

如何在stat_cor的结果标签中添加分组变量vs的自定义标签

嗨,我明白你的问题啦——你想让stat_cor的标签里显示你自定义的vs分组名称(Alpha和Beta),但现在出来的是数字对吧?这是因为..group..返回的是因子的底层编码(比如1、2),而不是你设置的标签文本。下面给你两种解决办法:

方法一:直接在stat_cor中转换分组编码为标签

我们可以利用after_stat()函数,把stat_cor输出的分组编码映射回你设置的vs标签。只需要修改stat_cor的aes(label)部分:

library(ggplot2)
library(ggpubr)

# 加载并处理数据
data("mtcars")
df <- mtcars
df$vs <- factor(df$vs, labels = c("Alpha", "Beta"))
df$MyFactor <- rep(c("White", "Black"), nrow(df)/2)

# 绘图
ggplot(df, aes(x=wt, y=mpg, group = vs, color = vs))+ # 加上color方便区分分组
  geom_point()+
  geom_smooth(method = "lm")+
  facet_wrap(~MyFactor)+
  stat_cor(
    aes(label = paste(
      # 将分组编码转换为自定义标签
      factor(after_stat(group), levels = 1:2, labels = levels(df$vs)),
      "- ", after_stat(r.label), after_stat(p.label), 
      sep = "~`,`~"
    )),
    method = "pearson", 
    label.y.npc="top", 
    label.x.npc = "left", 
    color = "black"
  )+
  theme_bw()

这里的关键是factor(after_stat(group), levels = 1:2, labels = levels(df$vs))——它把stat_cor返回的数字分组,转换成你之前设置的Alpha和Beta标签。

方法二:提前计算相关系数,用geom_text添加标签

如果需要更灵活地控制标签内容和位置,你可以先手动计算每个分组的相关系数和p值,再用geom_text把标签加到图上:

library(ggplot2)
library(ggpubr)
library(dplyr)

# 加载并处理数据
data("mtcars")
df <- mtcars
df$vs <- factor(df$vs, labels = c("Alpha", "Beta"))
df$MyFactor <- rep(c("White", "Black"), nrow(df)/2)

# 提前计算每个分组的相关系数和p值
cor_results <- df %>%
  group_by(vs, MyFactor) %>%
  summarize(
    r = cor(wt, mpg, method = "pearson"),
    p = cor.test(wt, mpg, method = "pearson")$p.value,
    .groups = "drop"
  ) %>%
  mutate(
    # 自定义标签格式
    label = paste(vs, "- r =", sprintf("%.2f", r), "p =", sprintf("%.3f", p)),
    # 设置标签位置(这里选每个面板的左上角)
    x = min(df$wt),
    y = max(df$mpg)
  )

# 绘图
ggplot(df, aes(x=wt, y=mpg, group = vs, color = vs))+
  geom_point()+
  geom_smooth(method = "lm")+
  facet_wrap(~MyFactor)+
  # 添加预计算的标签
  geom_text(
    data = cor_results,
    aes(x = x, y = y, label = label),
    inherit.aes = FALSE, # 不继承主图的aes设置
    hjust = 0, vjust = 1
  )+
  theme_bw()

这种方法的好处是你可以完全自定义标签的格式、位置,甚至添加更多统计量,适合复杂的可视化需求。

备注:内容来源于stack exchange,提问作者Borexino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 15:52:57