R ggplot绘图如何为标签添加PM2.5、O3等化学式下标
BKMR绘图污染物下标渲染方案
失效原因
之前的写法不生效有两个核心问题:
- 语法错误:R的ggplot2绘图系统默认不直接解析
$包裹的LaTeX语法,且写法$O[3]本身也不符合LaTeX下标规则(LaTeX下标需要用下划线_而非方括号) - 逻辑错误:bkmr输出的预测结果中
variable列为普通文本类型,直接作为分面标签时会原样输出所有字符,不会自动渲染格式。
具体修改步骤
- 修正数据列名:删掉列名里带
$和方括号的伪LaTeX代码,使用普通文本命名即可,避免后续数据处理出问题:colnames(dat) = c("LTE4", "O3", "PM2.5", "NO2", "Diethyl", "Dimethyl", "age", "tmpf", "relh", "sex", "agany", "agself", "asthma") - 绘图时添加标签映射:在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
相关产品推荐
相关产品推荐

