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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:09:24