如何向 ggplot2 axis.text 添加下标

Cep*_*irk 5 expression r ggplot2

我想在 ggplot 条形图中的每个因素中使用下标。

d = structure(list(env = structure(c(1L, 3L, 4L, 2L, 5L, 7L, 6L), .Label = c("mean SS", 
"50% O2 @ 25 °C", "50% O2 @ 0 °C", "50% O2 @ 10 °C", "anoxic @ 0 °C", 
"anoxic @ 25 °C", "anoxic @ 10 °C"), class = "factor"), pco2_inc = c(60, 
138.652445968464, 144.328210839879, 112.560395996095, 173.615572249453, 
234.86228704132, 209.102964222973)), class = "data.frame", row.names = c(NA, 
-7L))
Run Code Online (Sandbox Code Playgroud)

鉴于上面的 data.frame,我想生成这样的图:

ggplot(d, aes(env, pco2_inc)) + geom_col()
Run Code Online (Sandbox Code Playgroud)

阴谋

如何使所有条形标签的2inO2下标?

我已经看到如何更改整个 x 轴标签:

labs(x = expression(paste('50% ', O[2], ' @ 0 °C')))
Run Code Online (Sandbox Code Playgroud)

但找不到如何让它axis.text工作。

eip*_*i10 5

一种选择是将env字符串转换为有效的plotmath表达式,以便正确解析它们。下面的代码解决了这个问题,但如果没有更优雅的方法,我会感到惊讶。

library(tidyverse)

d = d %>%
  arrange(pco2_inc) %>% 
  mutate(env=gsub("O2", "O[2]", env),
         env=gsub(" ", "~", env),
         env=gsub("@", "'@'", env),
         env=gsub("%", "*'%'", env),
         env=gsub("~°", "*degree*", env))
Run Code Online (Sandbox Code Playgroud)
                          env pco2_inc
1                     mean~SS  60.0000
2 50*'%'~O[2]~'@'~25*degree*C 112.5604
3  50*'%'~O[2]~'@'~0*degree*C 138.6524
4 50*'%'~O[2]~'@'~10*degree*C 144.3282
5       anoxic~'@'~0*degree*C 173.6156
6      anoxic~'@'~25*degree*C 209.1030
7      anoxic~'@'~10*degree*C 234.8623
Run Code Online (Sandbox Code Playgroud)
ggplot(d, aes(reorder(env, pco2_inc), pco2_inc)) + geom_col() + 
  scale_x_discrete(labels=parse(text=unique(d$env))) +
  theme_classic(base_size=12) +
  theme(axis.text=element_text(colour="black", face="bold")) +
  labs(x="env")
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明