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

