轴文本 ggplot2 中的下标

问题描述 投票:0回答:1

我对 R 比较陌生,作为一名化学家,我需要经常使用下标。特别是,例如在这张图中:

enter image description here

我使用的代码如下:

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=element_text(size=20), axis.title=element_text(size=24,face="bold"), legend.title=element_text(size=24),legend.text=element_text(size=22))
TukeyHSD(prybsa.aov, which = "ATPS")

变量“ATPS”有三个水平:Bet:2LA/K2HPO4, ChCl:2Urea/K2HPO4 和 ChCl:2Urea/K3PO4,但我希望它们以下标出现 Bet:2LA/K2HPO4, ChCl :2Urea/K2HPO4 和 ChCl:2Urea/K3PO4.

r ggplot2 subscript ggpubr
1个回答
0
投票

实现您想要的结果的一个选择是使用

recode
符号添加下标
?plotmath
您的标签。然后使用例如
scales::label_parse
scale_x_discrete
解析数学表达式:

使用一些虚假的随机示例数据:

set.seed(123)

my_data <- data.frame(
  ATPS = rep(c("Bet:2LA/K2HPO4", "ChCl:2Urea/K2HPO4", "ChCl:2Urea/K3PO4"), each = 2),
  Pretreatment = c("Mortar", "None"),
  PRYBSA = runif(10 * 6, 0, 100)
)

library(ggpubr)
#> Loading required package: ggplot2

my_data$ATPS <- dplyr::recode(
  my_data$ATPS,
  "Bet:2LA/K2HPO4" = "Bet:2*LA/K[2]*HPO[4]",
  "ChCl:2Urea/K2HPO4" = "ChCl:2*Urea/K[2]*HPO[4]",
  "ChCl:2Urea/K3PO4" = "ChCl:2*Urea/K[3]*PO[4]"
)

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"
) + 
  scale_x_discrete(labels = scales::label_parse())

第二种也许更轻量级的方法是使用Unicode下标

my_data$ATPS <- dplyr::recode(
  my_data$ATPS,
  "Bet:2LA/K2HPO4" = "Bet:2LA/K\u2082HPO\u2084",
  "ChCl:2Urea/K2HPO4" = "ChCl:2Urea/K\u2082HPO\u2084",
  "ChCl:2Urea/K3PO4" = "ChCl:2Urea/K\u2083*PO\u2084"
)

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"
)

© www.soinside.com 2019 - 2024. All rights reserved.