R语言如何为变量名设置下标?ggplot绘图下标失效问题求助
解决ggplot中污染物名称下标显示问题
你的问题出在直接将expression对象作为因子标签——factor会把expression转成字符串,导致ggplot无法解析成数学表达式。以下两种方法可以解决:
方法1:利用ggplot的scale参数解析表达式
保持因子的labels为普通文本,在ggplot的scale层指定带expression的标签:
# 先设置因子的普通标签 risks$variable <- factor(risks$variable, levels=c("O3","PM2.5","NO2","Diethyl","Dimethyl"), labels=c("O3","PM2.5","NO2","Diethyl","Dimethyl")) # 在ggplot中通过scale_y_discrete指定表达式标签(因为coord_flip后原x轴变为y轴) ggplot(risks, aes(variable, est, ymin = est - 1.96*sd, ymax = est + 1.96*sd, col = q.fixed)) + geom_pointrange(position = position_dodge(width = 0.75)) + scale_y_discrete(labels = c(expression(O[3]), expression(PM[2.5]), expression(NO[2]), "Diethyl", "Dimethyl")) + coord_flip()
方法2:用ggtext包支持markdown下标
这种方法更直观,无需写expression,适合复杂文本格式:
# 安装并加载ggtext包 install.packages("ggtext") library(ggtext) # 设置因子标签为markdown格式的下标 risks$variable <- factor(risks$variable, levels=c("O3","PM2.5","NO2","Diethyl","Dimethyl"), labels=c("O<sub>3</sub>", "PM<sub>2.5</sub>", "NO<sub>2</sub>", "Diethyl", "Dimethyl")) # 在ggplot中启用markdown解析 ggplot(risks, aes(variable, est, ymin = est - 1.96*sd, ymax = est + 1.96*sd, col = q.fixed)) + geom_pointrange(position = position_dodge(width = 0.75)) + theme(axis.text.y = element_markdown()) + # 让y轴文本解析markdown coord_flip()
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

