如何按ggplot内计算的相关系数排序facet_wrap分面面板
实现方案
要实现分面按Spearman相关系数排序,同时展示相关系数标签,可以通过「先按分面分组计算相关系数→调整分面变量的因子水平顺序→绘图标注系数」的连贯流程实现,不需要提前单独预存统计数据,完整代码如下:
依赖包加载
# 未安装的包可先执行 install.packages(c("ggplot2", "dplyr", "ggpubr")) library(ggplot2) library(dplyr) library(ggpubr)
完整实现代码
mtcars %>% # 按分面字段cyl分组,计算每个分组的Spearman相关系数 group_by(cyl) %>% mutate(r_spearman = cor(disp, mpg, method = "spearman")) %>% ungroup() %>% # 调整分面变量的因子水平:order内加负号为按R值从高到低排序,去掉负号为升序 mutate(cyl = factor(cyl, levels = unique(cyl[order(-r_spearman)]))) %>% ggplot(aes(x = disp, y = mpg)) + geom_point() + geom_smooth(method = "lm", formula = y ~ x) + # 自动标注每个分面的Spearman相关系数和显著性 stat_cor(method = "spearman", label.x.npc = 0.7, label.y.npc = 0.9) + facet_wrap(~cyl)
关键逻辑说明
- 分面的排序规则完全由分面变量的因子水平决定,因此只需要将分面字段(示例中的
cyl)转为因子,按计算得到的相关系数调整水平顺序即可实现自定义排序。 - 分组计算相关系数的步骤通过管道和绘图流程完全整合,不需要单独生成统计表存储中间结果,符合需求。
stat_cor参数可以自定义调整标签位置、显示内容,比如仅显示R值可以将label参数设置为..r.label..。
内容的提问来源于stack exchange,提问作者Beth
相关产品推荐
相关产品推荐

