R ggplot2 两级小平面换行

R ggplot2 two-level facet wrap

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

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

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

这样的事情可能吗?

或者,我尝试使用网格 ar运行ge,但 "pure" 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")

您可以使用 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")

比较两种类型的变量,通常使用facet_grid:

更容易
ggplot(data=tdat, aes(x=time,y=value)) +
    geom_bar(stat="identity")+
    facet_grid(rows = vars(variable), cols = vars(B), 
               labeller = plot_labeller, scales="free_y", switch = 'y')