• 简单将ggplot多个图排列在一起


      这里我们使用grid对ggplot的画图对象进行布局

    # Multiple plot function
    #
    # ggplot objects can be passed in ..., or to plotlist (as a list of ggplot
    # objects)
    # - cols:   Number of columns in layout
    # - layout: A matrix specifying the layout. If present, 'cols' is ignored.
    #
    # If the layout is something like matrix(c(1,2,3,3), nrow=2, byrow=TRUE),
    # then plot 1 will go in the upper left, 2 will go in the upper right, and
    # 3 will go all the way across the bottom.
    # e=0.15, # extra height needed for last plot (vertical layout),
    # or extra width for first plot (horizontal layout)
    multiplot <- function(..., plotlist=NULL, file, cols=1,
                          layout=NULL, horizontal=FALSE, e=0.15) {
      require(grid)
      
      # Make a list from the ... arguments and plotlist
      plots = c(list(...), plotlist)
      
      numPlots = length(plots)
      #message(paste0('>>>>>>>INFO: num plots 2 = ', numPlots), '
    ')
      
      # If layout is NULL, then use 'cols' to determine layout
      if (is.null(layout)) {
        # Make the panel
        # ncol: Number of columns of plots
        # nrow: Number of rows needed, calculated from # of cols
        layout = matrix(seq(1, cols * ceiling(numPlots/cols)),
                        ncol = cols, nrow = ceiling(numPlots/cols))
      }
      
      if (numPlots==1) {
        print(plots[[1]])
        
      } else {
        
        ## set up heights/widths of plots
        
        # extra height needed for last plot (vertical layout),
        # or extra width for first plot (horizontal layout)
        hei = rep(1, numPlots)
        # bottom plot is taller
        hei[numPlots] = hei[numPlots]*(1+e)
        wid = rep(1, numPlots)
        # first left plot is wider
        wid[1] = wid[1]*(1+e)
        # Set up the page
        grid.newpage()
        if(horizontal){
          pushViewport(viewport(layout = grid.layout(nrow(layout),
                                                     ncol(layout), widths=wid)))
        }else{
          pushViewport(viewport(layout = grid.layout(nrow(layout),
                                                     ncol(layout), heights=hei)))
          
        }
        
        # Make each plot, in the correct location
        for (i in 1:numPlots) {
          # Get i,j matrix positions of the regions containing this subplot
          matchidx = as.data.frame(which(layout == i, arr.ind = TRUE))
          print(plots[[i]], vp = viewport(layout.pos.row = matchidx$row,
                                          layout.pos.col = matchidx$col))
        }
      }
    }
    
    
    library(ggplot2)
    p1 <- ggplot(iris, aes(x = Sepal.Length)) + geom_histogram() + theme_bw()
    p2 <- ggplot(iris, aes(x = Sepal.Length, y = Petal.Width)) + geom_point() + theme_bw()
    
    # 直接使用ggplot对象画图
    multiplot(p1,p2)
    
    # 将ggplot对象放入列表中,再用列表画图, 并设置两列的排列方式
    plot_lst <- list()
    plot_lst[[1]] <- p1
    plot_lst[[2]] <- p2
    multiplot(plotlist = plot_lst, cols = 2)
    

    参考资料

    ClonEvol: clonal ordering and visualization in cancer
    sequencing文献里面CloneEvol包里面boxplot.r函数

  • 相关阅读:
    项目依赖库列表文件requirements.txt生成和使用
    pymysql执行sql语句无效问题
    Prometheus
    关于在安装wampserver出现“由于找不到msvcr110.dll”的问题的解决办法
    安装centos8和Window10出现的一些问题和解决方法
    LeetCode833题:字符串中的查找与替换
    Pycharm中github的使用(只有链接供自己学习使用)
    机器学习《西瓜书》的学习笔记——机器学习使用的领域
    机器学习中数理统计与参数估计的相关基础概念
    怎样在Anaconda中的某一个环境中安装Python的相关包(pypyodbc)
  • 原文地址:https://www.cnblogs.com/ywliao/p/12419025.html
Copyright © 2020-2023  润新知