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包实现:
- 安装并加载ggtext:
install.packages("ggtext") library(ggtext)
- 将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>"))
- 修改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
相关产品推荐
相关产品推荐

