ggplot混合变量与表达式标注:facet_wrap分面下实现R²及带单位平均偏差标注
分面散点图标注R²和带单位平均偏差的实现方法
推荐方案:使用ggtext包实现(语法简单灵活)
ggtext的geom_richtext支持markdown/HTML语法渲染,可完美适配分面映射、动态变量注入、多行文本、特殊格式(上标、希腊字母)需求,无需复杂的表达式拼接。
完整修改后代码
library(tidyverse) library(ggtext) # 若使用theme_tufte需加载ggthemes包:library(ggthemes) Demo_Df <- tibble(Modeled = rnorm(50,0,1), Observed = rnorm(50, 0.5, 1), Scheme = c(rep("Scheme1", 25), rep("Scheme2", 25))) Demo_Annotation <- tibble(r.squared = c(0.589, 0.573), Mean_Bias = c(-2.038, -1.049), Scheme = c("Scheme1", "Scheme2")) Demo_Scatter <- Demo_Df %>% ggplot(aes(x = Observed, y = Modeled, color = Scheme)) + geom_point(size = 1.5) + facet_wrap(~Scheme) + # 没有ggthemes包可替换为theme_bw()等其他主题 theme_tufte() + xlab(expression(paste("Observed Aerosol (", mu, "g m" ^ "-3", ")"), sep = "")) + ylab(expression(paste("Modeled Aerosol (", mu, "g m" ^ "-3", ")"), sep = "")) + ylim(-3, 4) + theme(legend.position = "none") Demo_Labeled <- Demo_Scatter + geom_richtext( data = Demo_Annotation, aes(x = -2, y = 3, label = paste0( "R<sup>2</sup> = ", sprintf("%.2f", r.squared), "<br>", "Mean Bias = ", sprintf("%.2f", Mean_Bias), " μg m<sup>-3</sup>" )), size = 5, hjust = 0, color = "black", # 去掉文本默认的背景框和边框 fill = NA, label.colour = NA ) # 查看结果 Demo_Labeled
原生ggplot备选方案(无需额外安装包)
如果不想引入新依赖,可使用原生plotmath表达式配合parse = TRUE实现,缺点是多行间距调整灵活度低:
Demo_Labeled <- Demo_Scatter + geom_text( data = Demo_Annotation, aes(x = -2, y = 3, label = sprintf( "atop(R^2 == %.2f, ~Mean~Bias == %.2f~mu*g~m^{-3})", r.squared, Mean_Bias )), size = 5, hjust = 0, color = "black", parse = TRUE )
内容的提问来源于stack exchange,提问作者jfbrewer
相关产品推荐
相关产品推荐

