【问题标题】:R ggpot: Arranging on one page several ggplots created with a loop / name each plot differenlyR ggplot:在一页上安排几个用循环创建的ggplots/以不同的方式命名每个图
【发布时间】:2020-12-13 17:48:33
【问题描述】:

我知道,以前也有人问过类似的问题,但没有完全解释答案和/或该解决方案不适用于我的情况,所以:

你如何在一页上安排几个用循环创建的ggplot?

在寻找答案时,我发现了一些如果每个地块都有自己的名称可能会奏效。例如,grid_arrange_shared_legend 可能正是我所需要的,但是通过我创建的循环,每个情节都覆盖了前一个情节。所以也许问题是:有没有办法给每个 ggplots 赋予唯一的名称?

为了更好地了解我的具体情况,这里有一段代码,用于在 mtcars 数据库上复制它;不同档位平均mpg柱状图,每缸一个柱状图:

library(dplyr)
library(ggplot2)

cylinder<-unique(mtcars$cyl)

    for (value in cylinder) {
      m<-mtcars%>%
        filter(cyl==value)%>%
        group_by (gear)%>%
        summarise(number=n(), average=mean(mpg), se=sd(mpg))
  print(m) # reporting the numbers
  
  a<-m%>%
    mutate(gear=factor(gear, levels=unique(gear)))%>%
    ggplot()+
    geom_bar(aes(x=gear, y=average), stat = 'identity', fill ='red') +
    geom_errorbar( aes(x= gear, ymin=average-se, ymax=average+se), width=0.2, colour="black", alpha=1, size=1) +
    xlab("gears") + ylab("average mpg") +
    ggtitle (paste( "cyliner:", value ))+
    theme(axis.ticks.x=element_blank())  
  print(a) }

【问题讨论】:

    标签: r loops ggplot2


    【解决方案1】:

    使用patchwork 试试这个。您的循环定义明确。您只需要创建一个列表来存储绘图,然后使用patchwork 中的wrap_plots() 将绘图排列在一页中。代码如下:

    library(dplyr)
    library(ggplot2)
    library(patchwork)
    #Create list
    List <- list()
    cylinder<-unique(mtcars$cyl)
    #Loop
    for (value in seq_along(cylinder)) {
      m<-mtcars%>%
        filter(cyl==cylinder[value])%>%
        group_by (gear)%>%
        summarise(number=n(), average=mean(mpg), se=sd(mpg))
      print(m) # reporting the numbers
      
      a<-m%>%
        mutate(gear=factor(gear, levels=unique(gear)))%>%
        ggplot()+
        geom_bar(aes(x=gear, y=average), stat = 'identity', fill ='red') +
        geom_errorbar( aes(x= gear, ymin=average-se, ymax=average+se), width=0.2, colour="black", alpha=1, size=1) +
        xlab("gears") + ylab("average mpg") +
        ggtitle (paste( "cyliner:", value ))+
        theme(axis.ticks.x=element_blank())  
      print(a)
      List[[value]]<-a}
    #Wrap plots
    wrap_plots(List,nrow = 1)
    

    输出:

    【讨论】:

    • 是的,它适用于示例,但给我一个错误:只知道如何添加 ggplots 和/或 grobs。不知道是什么意思。
    • @GalLevin 有些绘图无法正确创建。
    猜你喜欢
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    相关资源
    最近更新 更多