如何将下标添加到ggplot2 axis.text

时间:2018-05-25 04:45:05

标签: r ggplot2 expression

我想在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))

鉴于上面的data.frame,我想制作一个这样的情节:

ggplot(d, aes(env, pco2_inc)) + geom_col()

plot

如何在2下方为所有条形标签订阅O2

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

labs(x = expression(paste('50% ', O[2], ' @ 0 °C')))

但无法找到如何使axis.text起作用。

1 个答案:

答案 0 :(得分:2)

一种选择是将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))
                          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
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")

enter image description here