通过apply函数生成多个ggplot箱线图

4
我想知道是否可以使用apply函数生成类似于这个嵌套循环组合生成的一组箱线图。
可能不是必要的,但我认为应该是可能的,只是我无法理解如何实现。
我需要能够绘制此图以查看数百个因素与一个变量(mtcars $ mpg)的比较情况。
head(mtcars)

for (i in 8:11) {
    for (j in 8:11) {

        if (i != j) {

            title = paste(names(mtcars)[i], names(mtcars)[j], 
                sep = "/")

            p <- ggplot(mtcars, aes(interaction(mtcars[,i], mtcars[, j]), mpg, fill = factor(mtcars[,i]))) + geom_boxplot(alpha = I(0.7))
            p <- p + ggtitle(title) + scale_fill_hue()


        } else {

            title = paste(names(mtcars)[i])

            p <- ggplot(mtcars, aes(factor(mtcars[,i]), mpg, fill = factor(mtcars[, i]))) + geom_boxplot(alpha = I(0.7))
            p <- p + ggtitle(title) + scale_fill_hue()


        }

        print(p)
    }
} 
1个回答

3
将if块放入一个函数中:
plotGG <- function(i,j) 
  {
  if (i != j) { ... } else{ ... }
 }

然后调用它:

mapply(plotGG,8:11,8:11)

并且它有效。

由于ggplot的作用域问题,您的代码将无法正常工作。但是您可以在此处查看解决方案:aes中的本地变量

编辑: 您可以根据需要完成包装:

multiPlotGG <- function(l1,l2) {
 mapply(plotGG,rep(l1,each = length(l2)),rep(l2,length(l1)))
}
multiPlotGG(8:11,8:11)

在您的答案中使用mapply将仅生成i=j的四种组合。 - Marat Talipov
感谢 @MaratTalipov。之前的解决方法是指向正确的方向。现在更新为包装器。 - Shambho
大家好:)应用函数对我来说真的不直观! - aeongrail

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