我想在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()
如何在2
下方为所有条形标签订阅O2
?
我已经看到了如何更改整个x轴标签:
labs(x = expression(paste('50% ', O[2], ' @ 0 °C')))
但无法找到如何使axis.text
起作用。
答案 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")