Align plot areas in ggplot

前端 未结 5 1631
無奈伤痛
無奈伤痛 2020-11-29 01:04

I am trying to use grid.arrange to display multiple graphs on the same page generated by ggplot. The plots use the same x data but with different y variables. The plots come

5条回答
  •  春和景丽
    2020-11-29 01:16

    That's exactly the kind of problem for which I wrote the cowplot package. It can be done in one line in that package:

    require(cowplot) # loads ggplot2 as dependency
    # re-create the four plots
    A <- c(1,5,6,7,9)
    B <- c(10,56,64,86,98)
    C <- c(2001,3333,5678,4345,5345)
    D <- c(13446,20336,24333,34345,42345)
    L <- c(20,34,45,55,67)
    M <- data.frame(L, A, B, C, D)
    x1 <- ggplot(M, aes(L, A,xmin=10,ymin=0)) + geom_point() + stat_smooth(method='lm')
    x2 <- ggplot(M, aes(L, B,xmin=10,ymin=0)) + geom_point() + stat_smooth(method='lm')
    x3 <- ggplot(M, aes(L, C,xmin=10,ymin=0)) + geom_point() + stat_smooth(method='lm')
    x4 <- ggplot(M, aes(L, D,xmin=10,ymin=0)) + geom_point() + stat_smooth(method='lm')
    
    # arrange into grid and align
    plot_grid(x1, x2, x3, x4, align='vh')
    

    This is the result: enter image description here (Note that cowplot changes the default ggplot2 theme. You can get the gray one back though if you really want to.)

    As a bonus feature, you can also add plot labels in the top-left corner of each graph:

    plot_grid(x1, x2, x3, x4, align='vh', labels=c('A', 'B', 'C', 'D'))
    

    Result: enter image description here

    I use the labels option on virtually every multi-part graph I make.

提交回复
热议问题