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工作。
一种选择是将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)
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
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)