R ggplot2两级镶嵌面包裹

R ggplot2两级镶嵌面包裹,r,ggplot2,label,facet,facet-wrap,R,Ggplot2,Label,Facet,Facet Wrap,我想用facet_wrap编辑ggplot图形的facet标签,如下所示: 我只想把ALPHA和BETA标签写在最上面一行 我只想在左边写第一、第二和第三行,每行只写一次 这样的事情可能发生吗 或者,我尝试使用grid arrange,但是“纯”ggplot图看起来更好,代码更易于操作(每行的复制和粘贴更少)。此外,我还遇到了网格排列的行高问题(一些图被上帝切断) 例如: Anames <- list( '1'="FIRST", '2'="SECOND", '3'="THIRD

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

  • 我只想把ALPHA和BETA标签写在最上面一行

  • 我只想在左边写第一、第二和第三行,每行只写一次

  • 这样的事情可能发生吗

    或者,我尝试使用grid arrange,但是“纯”ggplot图看起来更好,代码更易于操作(每行的复制和粘贴更少)。此外,我还遇到了网格排列的行高问题(一些图被上帝切断)

    例如:

    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")
    

    Anames您可以使用
    facet\u grid
    执行此操作<代码>开关
    设置为“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\u 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')