R ggplot2两级分面包装

时间:2018-10-05 14:21:33

标签: r ggplot2 label facet facet-wrap

我想使用facet_wrap编辑ggplot图形的构面标签,如下所示:

  1. 我只想在第一行写ALPHA和BETA标签。

  2. 我只想在左侧写FIRST,SECOND和THIRD,每行只写一次。

这样的事情有可能吗?

或者,我尝试使用网格排列,但是“纯” ggplot图看起来更好,并且代码更易于操作(每行更少的复制和粘贴)。我也遇到了grid_arrange的行高问题(有些地块被上帝割掉了)。

示例:

Anames <- list(
  '1'="FIRST",
  '2'="SECOND",
  '3'="THIRD")

Bnames <- list(
  'A'="ALPHA",
  'B'="BETA")

plot_labeller <- function(variable,value){

# http://www.sthda.com/english/wiki/print.php?id=175

  if (variable=='variable') {
    return(Anames[value])
  } else {
    return(Bnames[value])
  }
}

tdat <- data.frame("variable" = c(rep(seq(1,3),10)), # Group Factor 1 
                   "B" = c(rep(seq(1,2),15)), # Group Factor 2
                   "time" = c(1:30),
                   "value" = sample(1:100,30))
tdat$B <- ifelse(tdat$B==1,"A","B")

library(ggplot2)
ggplot(data=tdat, aes(x=time,y=value)) +
  geom_bar(stat="identity")+
  facet_wrap(~variable+B,
             labeller=plot_labeller,
             ncol=2,scales="free_y")

2 个答案:

答案 0 :(得分:1)

您可以使用facet_grid来执行此操作。 switch设置为“ y”以在左侧绘制标签。

ggplot(data=tdat, aes(x=time,y=value)) +
    geom_bar(stat="identity")+
    facet_grid(variable ~ B,
               labeller=plot_labeller,
               scales="free_y",
               switch = "y")

答案 1 :(得分:1)

要比较两种类型的变量,通常更容易使用header.php

facet_grid

enter image description here