【问题标题】:ggplot2 individual ylabs for each facet_grid每个 facet_grid 的 ggplot2 单独 ylabs
【发布时间】:2017-11-08 21:00:29
【问题描述】:

我用 Inkscape 编辑了这个情节,但是我想知道是否有办法在 ggplot 环境中完成它?

我在网上进行了快速搜索,但没有任何成功。有人可以给我一个解决方法吗?

我真的很感激,因为我认为这是一种非常常见的情节。

这个情节的代码是:

var3 %>% 
  gather(-(exp:rep), key = "variable", value ="value") %>%
  mutate(variable = recode(variable, 
                           diam = "Lesion diameter",
                           dles = "Lesion density",
                           sev = "Disease severity")) %>% 
  ggplot(aes(x = Iso, y = value)) + 
  geom_boxplot(aes(fill=factor(exp)),
               position = position_dodge(width = 0), alpha = 0.5, 
               width =0.3) +
  facet_grid(variable~Cv, 
             labeller = labeller(Cv = label_both, variable = label_value),
             scales = "free")+
  scale_y_continuous(labels=scaleFUN)+
  theme_juan(9, "top", "center")+
  scale_fill_manual(values = c("grey70","grey30"),
                    labels = c("Exp. 1","Exp. 2"), name = "")

作为var3一个数据框看起来像:

# A tibble: 72 x 7
     exp           Cv    Iso   rep        sev      dles      diam
   <dbl>       <fctr> <fctr> <dbl>      <dbl>     <dbl>     <dbl>
 1     1 BMX_Potencia     MT     1 0.17262317 1.8924050 0.2400000
 2     1 BMX_Potencia     MT     2 0.14700000 2.1483445 0.3000000
 3     1 BMX_Potencia     MT     3 0.01404289 1.3623602 0.2133333
 4     1 BMX_Potencia     MT     4 0.11933333 1.3160049 0.2900000

【问题讨论】:

  • 您应该向reproducible example 提供示例数据和用于制作绘图的代码。
  • 这不是构面的真正用例。它们旨在跨组比较相同的变量, y 轴应具有相同的单位,最好具有相同的比例。您可以使用 cowplot 等工具创建绘图。
  • 另一种选择是使用 grobs(查找 ggplotGrob()arrangeGrob()grid.arrange())将 3 个图组合成一个多面板图。
  • 我同意@neilfws,但是我发现这个函数是一种方便的方法来对齐绘图并避免使用多个 x 轴,例如当它是一个公共变量作为时间时。
  • 对于气象数据,如降水、最高、最低温度,它也适用,如stackoverflow.com/questions/15999304/…

标签: r ggplot2 axis-labels facet-grid


【解决方案1】:

你可以试试这个解决方法

library(ggplot2)
library(grid)

d <- data.frame(x=1:4, f1=gl(2,2, labels=c("A","B")), f2=rep(letters[1:2],each=2))

p1 <- ggplot(d, aes(x,x)) + geom_blank() + 
  facet_grid(f1~f2)

p2 <- p1 + facet_grid(f1~f2, switch = 'y', 
                      labeller = labeller(f1=c(A="this", B="that")))+ 
  theme(strip.placement.y = "outside",
        strip.text.y = element_text(angle = 90),
        strip.background = element_blank()) 

g1 <- ggplotGrob(p1)
g2 <- ggplotGrob(p2)

grid.newpage()
grid.draw(gridExtra::gtable_cbind(g2[,-ncol(g2)], g1[,ncol(g1)-3]))

【讨论】:

  • 很好......但是,“这个”和“那个”对我来说与你的代码方向相反......
  • 可能会改变:strip.text.y = element_text(angle = 270)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-29
  • 2017-01-26
  • 2013-10-10
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多