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

R ggplot绘图如何为标签添加PM2.5、O3等化学式下标

BKMR绘图污染物下标渲染方案

失效原因

之前的写法不生效有两个核心问题:

  • 语法错误:R的ggplot2绘图系统默认不直接解析$包裹的LaTeX语法,且写法$O[3]本身也不符合LaTeX下标规则(LaTeX下标需要用下划线_而非方括号)
  • 逻辑错误:bkmr输出的预测结果中variable列为普通文本类型,直接作为分面标签时会原样输出所有字符,不会自动渲染格式。

具体修改步骤

  1. 修正数据列名:删掉列名里带$和方括号的伪LaTeX代码,使用普通文本命名即可,避免后续数据处理出问题:
    colnames(dat) = c("LTE4", "O3", "PM2.5", "NO2", "Diethyl", "Dimethyl", "age", "tmpf", "relh", "sex", "agany", "agself", "asthma")
    
  2. 绘图时添加标签映射:在ggplot的分面函数中通过labeller参数指定每个变量对应的带格式标签,使用R原生支持的plotmath表达式语法写上下标,不需要额外安装复杂依赖。
    • 单变量暴露-响应图修改代码:
    ggplot(pred.resp.univar, aes(z, est, ymin = est - 1.96*se, ymax = est + 1.96*se)) +  
      geom_smooth(stat = "identity") + 
      geom_hline(yintercept = 0, lty = 5, col = "red2", alpha = 0.4) +
      facet_wrap(~ variable, nrow = 1,
                 labeller = labeller(variable = c(
                   "O3" = expression(O[3]),
                   "PM2.5" = expression(PM[2.5]),
                   "NO2" = expression(NO[2]),
                   "Diethyl" = "Diethyl",
                   "Dimethyl" = "Dimethyl"
                 ))) + 
      ylab("h(z)")
    
    • 双变量暴露-响应图修改代码(需要同时给横纵两个维度的变量做标签映射):
    ggplot(pred.resp.bivar, aes(z1, z2, fill = est)) +
      geom_raster() +
      facet_grid(variable2 ~ variable1,
                 labeller = labeller(
                   variable1 = c(
                     "O3" = expression(O[3]),
                     "PM2.5" = expression(PM[2.5]),
                     "NO2" = expression(NO[2]),
                     "Diethyl" = "Diethyl",
                     "Dimethyl" = "Dimethyl"
                   ),
                   variable2 = c(
                     "O3" = expression(O[3]),
                     "PM2.5" = expression(PM[2.5]),
                     "NO2" = expression(NO[2]),
                     "Diethyl" = "Diethyl",
                     "Dimethyl" = "Dimethyl"
                   )
                 )) +
      scale_fill_gradientn(colours=c("#0000FFFF","#FFFFFFFF","#FF0000FF")) +
      xlab("暴露1") +
      ylab("暴露2") +
      ggtitle("h(暴露1, 暴露2)")
    

可选优化

如果更习惯写标准LaTeX语法,可以安装latex2exp包,用TeX()函数自动把标准LaTeX语句转成R可识别的表达式,比如TeX("$O_3$")和上面expression(O[3])效果完全一致,注意LaTeX下标必须用下划线连接,不能用方括号。

内容的提问来源于stack exchange,提问作者Matt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 10:21:26