R语言使用parse生成带空格的上标ggplot轴标签报错如何解决?
问题原因
parse()函数解析的是R绘图表达式语法,空格在R表达式中属于语法分隔符,不会被识别为普通文本内容,因此直接传入带空格的字符串会触发语法报错。
解决方案
方案1:调整表达式语法(无需额外安装包)
你可以选择两种写法实现带空格的上标标签:
- 写法1:直接用
expression函数,用波浪号~代替需要显示的空格
GTVol <- 1:10 measuredVol <- 1:10 dat <- data.frame(GTVol, measuredVol) ggplot(dat, aes(GTVol, measuredVol)) + geom_point() + geom_abline(slope=1) + xlab(expression(Harvested~Volume~(m^3))) + ylab(expression(QSM~Volume~(m^3)))
- 写法2:保留
parse函数,把带空格的文本用单引号包裹,不同内容块用~连接
GTVol <- 1:10 measuredVol <- 1:10 dat <- data.frame(GTVol, measuredVol) ggplot(dat, aes(GTVol, measuredVol)) + geom_point() + geom_abline(slope=1) + xlab(parse(text="'Harvested Volume' ~ (m^3)")) + ylab(parse(text="'QSM Volume' ~ (m^3)"))
方案2:使用markdown语法写标签(更直观易维护)
如果不想记忆R表达式语法,可以通过ggtext包直接解析markdown格式的标签,空格可以正常输入,上标用HTML的<sup>标签实现即可:
首先安装加载依赖包:
install.packages("ggtext") library(ggtext) library(ggplot2)
绘图代码:
GTVol <- 1:10 measuredVol <- 1:10 dat <- data.frame(GTVol, measuredVol) ggplot(dat, aes(GTVol, measuredVol)) + geom_point() + geom_abline(slope=1) + xlab("Harvested Volume (m<sup>3</sup>)") + ylab("QSM Volume (m<sup>3</sup>)") + theme( axis.title.x = element_markdown(), axis.title.y = element_markdown() )
内容的提问来源于stack exchange,提问作者Jan Hackenberg
相关产品推荐
相关产品推荐

