R ggplot遍历污染物列表绘图时含化学式的标题显示异常如何解决
问题原因
问题根因是R语言列表的元素提取规则差异:
- 用
[]提取列表元素时,返回的是包含目标元素的子列表,而非元素本身 ggtitle()无法识别嵌套在子列表中的表达式对象,因此会出现解析异常
解决方法
将提取列表元素的单中括号[]替换为双中括号[[ ]]即可,双中括号会直接返回列表对应位置的元素本体,也就是你需要的expression对象。
修正后的示例代码如下:
library(ggplot2) qdf = data.frame(x = rnorm(10), y = rnorm(10)) # 多标题列表 MultiTitles = list( expression(paste(NO[2], " pollutant values")), expression(paste(PM[2.5], " pollutant values")) ) # 单独调用验证 ggplot(qdf, aes(x,y)) + geom_point() + ggtitle(MultiTitles[[2]]) # 循环批量绘图示例 for (i in seq_along(MultiTitles)) { p <- ggplot(qdf, aes(x,y)) + geom_point() + ggtitle(MultiTitles[[i]]) print(p) # 如需批量保存可在此处添加ggsave逻辑 }
拓展:动态生成表达式标题
如果需要处理的污染物种类较多,也可以用parse()动态生成标题,不需要手动逐个写expression:
# 污染物名称向量,下标写法符合R表达式语法 pollutants <- c("NO[2]", "PM[2.5]", "SO[2]", "O[3]") # 批量生成标题表达式列表 MultiTitles <- lapply(pollutants, function(p) { parse(text = paste0(p, "~污染物浓度")) })
内容的提问来源于stack exchange,提问作者narratorjay
相关产品推荐
相关产品推荐

