如何使用R和ggplot2创建一个绘图矩阵

4

我正在尝试将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
嗨@Knak,感谢您的评论。我尝试调用ggarrange(plotlist = p),但出现以下错误:“错误:StatBin需要连续的x变量:x变量是离散的。也许您想要stat =“count”?”。谢谢:) - Marc
当您使用plot_grid时会发生什么? - Arthur Yip
@ArthurYip 我遇到了与上述相同的错误。谢谢。 - Marc
@Marc 如果这个解决方案解决了你的问题,请接受它,谢谢! - Arthur Yip
1个回答

0

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

您已经将“Survey”作为第一个参数(数据槽)放入ggplot中。在映射参数(第二个槽)中,您放入了aes(...),并且在其中应该指定变量名称,而不是数据本身。因此,请尝试这样做:

在两个地方使用时, 请改为使用aes(x = names(Survey[[i]], fill=brand))

关于绘制多个图形,par(mfrow...)适用于基础R图形,不能用于ggplot。一旦您修复了图形中的错误,grid.arrange、multiplot和plot_grid都应该可以使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接