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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:06:02