ggplot2-手动指定boxplot方面标签作为符号/数学表达式

时间:2018-08-18 13:17:53

标签: r ggplot2 label boxplot facet

我有一个名为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_hatp_hat变量的箱线图。我首先像这样准备SPECIES

tibble

然后像这样绘制它:

my_data_plot <- my_data %>% 
    gather("psi_hat", "p_hat", key = "parameter", value = "estimate")

哪个给我:

enter image description here

我现在要做的是将刻面标记为实际的希腊符号,而不是例如“ 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

1 个答案:

答案 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创建。