在facet_wrap

时间:2019-01-15 15:49:07

标签: r

我想为facet_wrap中的每个图添加p值标签,而不重命名多面变量的顶部标签。我设置了scales="free",因此请考虑到这一点。

在绘制离散变量时,我能够做到这一点,因为我只需要在aes(x = labels)上为geom提供标签。但是,当涉及密度时,我需要提供数值变量,我希望ggplot估计该密度。

这里有一个最小的可复制代码:

library(tidyverse)

# Data frame
df <- tibble(Var = c("Var1", "Var1", "Var1", "Var1", "Var2", "Var2", "Var2", "Var2"), 
             Val = c(1, 1, 2, 3, 3, 3, 4, 2),
             Pvl = c("0.567", "0.049*", "0.078.", "0.003*", "0.567", "0.049*", "0.078.", "0.003*"))

# Plot
ggplot(df) + 
  geom_density(aes(x = Val)) + 
  facet_wrap(~Var) + 
  labs(x = NULL)

这将导致:

base plot

我希望它返回的是:

desired plot

2 个答案:

答案 0 :(得分:1)

我不知道如何在切面之后设置标签,因此我提供了另一个选项,该选项使用grid.arrange()将多个ggplots放在一起,并分别使用map2()设置标签。

library(tidyverse)
library(gridExtra)

df %>% split(.$Var) %>%
  map2(c("0.078.", "0.049*"),
    ~ ggplot(.x, aes(x = Val)) +
        geom_density() + xlab(.y) +  # xlab(.y) is what you expect
        xlim(1, 4) + ylim(0, 0.8) +
        ggtitle(.x$Var) + theme_bw() +
        theme(plot.title = element_text(hjust = 0.5))) %>%
  reduce(grid.arrange, ncol = 2)

enter image description here

答案 1 :(得分:0)

这对您有用吗?

 library(tidyverse)
      ggplot(df) + 
      geom_density(aes(x = Val)) + 
      facet_wrap(~Var,scales="free") + 
      labs(x="")+
      geom_text(data=data.frame(x=2.4, y=c(0.3,0.8), label=c("0.078.","0.049*"), 
                                Var=c("Var1","Var2")), 
                aes(x,y,label=label), inherit.aes=FALSE)+
      theme_bw()
            #You can change themes
            #y=0.8 and 0.3  to maintain plot

问题是您将p值放在首位 情节: enter image description here