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

R语言ggplot2中为坐标轴文本添加下标问题求助

解决ggline中化学分子式下标显示问题

针对你需要将ATPS变量的水平显示为带下标的化学分子式需求,提供两种高效实现方式:

方法一:用Base R表达式修改因子水平

ggplot2(ggline基于此)支持直接解析R的expression()对象来渲染下标,只需提前修改数据中ATPS的因子标签:

# 重新指定ATPS的水平与对应下标标签
my_data$ATPS <- factor(my_data$ATPS,
                       levels = c("Bet:2LA/K2HPO4", "ChCl:2Urea/K2HPO4", "ChCl:2Urea/K3PO4"),
                       labels = c(expression("Bet:2LA/K"[2]*"HPO"[4]),
                                  expression("ChCl:2Urea/K"[2]*"HPO"[4]),
                                  expression("ChCl:2Urea/K"[3]*"HPO"[4])))

修改后直接运行你原来的ggline代码即可,轴文本会自动渲染出下标格式。

方法二:用ggtext支持Markdown语法(更直观)

如果习惯用<sub>标签写下标,可借助ggtext包实现:

  1. 安装并加载ggtext:
install.packages("ggtext")
library(ggtext)
  1. 将ATPS标签改为Markdown格式:
my_data$ATPS <- factor(my_data$ATPS,
                       levels = c("Bet:2LA/K2HPO4", "ChCl:2Urea/K2HPO4", "ChCl:2Urea/K3PO4"),
                       labels = c("Bet:2LA/K<sub>2</sub>HPO<sub>4</sub>",
                                  "ChCl:2Urea/K<sub>2</sub>HPO<sub>4</sub>",
                                  "ChCl:2Urea/K<sub>3</sub>HPO<sub>4</sub>"))
  1. 修改ggline的theme配置,将x轴文本改为element_markdown():
ggline(my_data, x = "ATPS", y = "PRYBSA", color = "Pretreatment",
       add = "mean_sd", size=1, ylim=c(0,105),
       palette = c("#00AFBB", "#E7B800"), legend="right",
       ylab ="Protein recovery yield / %",error.plot = "errorbar") + 
  theme(axis.text.y=element_text(size=20), 
        axis.text.x=element_markdown(size=20), # 替换为markdown渲染
        axis.title=element_text(size=24,face="bold"), 
        legend.title=element_text(size=24),
        legend.text=element_text(size=22))

额外处理:TukeyHSD结果的下标显示

若需要TukeyHSD输出的分组名也带下标,可在修改因子水平后再做方差分析,或手动调整结果的行名:

# 修改因子水平后重新拟合方差分析
prybsa.aov <- aov(PRYBSA ~ ATPS, data = my_data)
tukey_result <- TukeyHSD(prybsa.aov, which = "ATPS")

# 手动替换行名中的数字为下标格式
rownames(tukey_result$ATPS) <- gsub("K2", "K₂", rownames(tukey_result$ATPS))
rownames(tukey_result$ATPS) <- gsub("K3", "K₃", rownames(tukey_result$ATPS))

print(tukey_result)

内容的提问来源于stack exchange,提问作者David Moldes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:47:10