【问题标题】:How to create a matrix of plots with R and ggplot2如何使用 R 和 ggplot2 创建图矩阵
【发布时间】:2019-07-11 15:56:07
【问题描述】:

我正在尝试将 n 个连续的图排列成一个图矩阵。我首先通过运行一个 for 循环来获得这些图,但我不知道如何将它们排列成一个“图的图”。我使用了 par(mfrow=c(num.row,num.col)) 但它不起作用。还有 multiplot(plotlist = p, cols = 4) 和 plot_grid(plotlist = p)

#import dataset
Survey<-read_excel('datasets/Survey_Key_and_Complete_Responses_excel.xlsx',
                      sheet = 2)

#Investigate how the dataset looks like
glimpse(Survey)#library dplyr

#change data types
Survey$brand <- as.factor(Survey$brand)
Survey$zipcode <- as.factor(Survey$zipcode)
Survey$elevel <- as.factor(Survey$elevel)
Survey$car <- as.numeric(Survey$car)

#Relation brand-variables
p = list()
for(i in 1:ncol(Survey)) {

    if ((names(Survey[i])) == "brand"){
      p[[i]]<-ggplot(Survey, aes(x = brand)) + geom_bar() +
        labs(x="Brand")

  } else if (is.numeric(Survey[[i]]) == "TRUE"){
     p[[i]]<-ggplot(Survey, aes(x = Survey[[i]], fill=brand)) +     geom_histogram() +
      labs(x=colnames(Survey[i]))

   } else {
    p[[i]]<-ggplot(Survey, aes(x = Survey[[i]], fill = brand)) +     geom_bar() +
      labs(x=colnames(Survey[i]))
  }
}

我认为图表已正确附加到列表中,但我无法以矩阵形式绘制它们。

【问题讨论】:

  • 您好,我认为ggpubr 包中的ggarrange() 函数可能对您有用。它使在网格中排列图变得容易。
  • 嗨@Knak,感谢您的评论。我试过调用 ggarrange(plotlist = p) 并收到以下错误:'错误:StatBin 需要一个连续的 x 变量:x 变量是离散的。也许你想要 stat="count"?'。谢谢:)
  • 那么当你使用 plot_grid 时会发生什么?/
  • @ArthurYip 我得到与上面相同的错误。谢谢
  • @Marc 如果解决了您的问题,请接受该解决方案,谢谢!

标签: r for-loop matrix ggplot2 plot


【解决方案1】:

问题似乎不在于您的多个绘图,而在于您如何将变量调用到绘图中。

您已经将“调查”作为第一个参数(数据槽)放入 ggplot。在映射参数(第二个槽)中,您放入 aes(...) 并在其中指定变量名称,而不是数据本身。所以试试这个:

你在两个地方有aes(x = Survey[[i]], fill=brand)), 换成aes(x = names(Survey[[i]], fill=brand))

关于绘制多个图,par(mfrow... 用于基础 R 图,不能用于 ggplot。修复绘图中的错误后,grid.arrange、multiplot 和 plot_grid 应该都可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 2016-01-13
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多