我有一个名为tibble
的{{1}}数据帧,看起来像这样:
my_data
> my_data
# A tibble: 60 x 4
SPECIES simulation_id psi_hat p_hat
<chr> <int> <dbl> <dbl>
1 Grey squirrel 74 0.527 0.306
2 Grey squirrel 102 0.526 0.316
3 Grey squirrel 142 0.527 0.309
4 Grey squirrel 121 0.527 0.309
5 Grey squirrel 25 0.526 0.317
6 Grey squirrel 50 0.527 0.309
7 Grey squirrel 67 0.491 0.326
8 Grey squirrel 19 0.527 0.306
9 Grey squirrel 174 0.527 0.302
10 Grey squirrel 46 0.527 0.309
# ... with 50 more rows
中有三个不同的SPECIES
。
我想为每个my_data
制作一个psi_hat
和p_hat
变量的箱线图。我首先像这样准备SPECIES
:
tibble
然后像这样绘制它:
my_data_plot <- my_data %>%
gather("psi_hat", "p_hat", key = "parameter", value = "estimate")
哪个给我:
我现在要做的是将刻面标记为实际的希腊符号,而不是例如“ psi_hat”,以便“ psi_hat”将获得与构面标签中的ggplot(data = my_data_plot, mapping = aes(x = SPECIES)) +
geom_boxplot(mapping = aes(y = estimate)) +
facet_grid(. ~ parameter)
等效的符号。
我知道在expression(hat(psi))
中我可以使用facet_grid
,但这意味着我的变量名必须是实际的表达式,但是当变量名必须是一个函数调用(即labeller = label_parse
)。例如,我尝试了hat(psi)
,这给了我这个错误:
my_data <- my_data %>% rename(hat(psi) = "psi_hat")
我也考虑过Error: unexpected '=' in:
"my_data <- my_data %>%
rename(hat(psi) ="
,但这似乎要求我在此图中只有列时指定行和列。
因此,我想知道是否有必要或需要我手动定义这些方面标签的表达式?还是有一种更算法的方法来实现这一目标?
谢谢!
这是labeller = bquote
中的dput()
:
my_data
答案 0 :(得分:5)
您可以尝试一下。由于您的数据采用长格式,因此我使用case_when
重命名变量,并将其标记给标签编辑器
library(tidyverse)
df %>%
gather(key = "parameter", value = "estimate", -SPECIES, -simulation_id) %>%
mutate(parameter = case_when(
parameter == "psi_hat" ~ "hat(psi)",
parameter == "p_hat" ~ "hat(p)"
)) %>%
ggplot(aes(x = SPECIES)) +
geom_boxplot(mapping = aes(y = estimate)) +
facet_grid(. ~ parameter, labeller = label_parsed)
由reprex package(v0.2.0)于2018-08-18创建。