2017-05-07 56 views
0

我想在循环中创建几个图(使用ggplot2),我正在使用下面的函数。如何在函数参数中设置ggplot参数

我使用的数据设置光圈和增加了一个叫做“ran_fact随机因子变量,因此该数据集现在已经四个数字变量和两个因素(种类和ran_fac)。

在循环穿过的那一刻数值变量并为每个变量创建一个图形,这两个因子变量是在循环内部手动设置的(如图中的x轴和颜色),这使得它变得更加通用,我想知道是否可以设置x轴,轴和颜色选项作为函数参数,如果是的话可以怎么做?

提前致谢。

另外,作为一个侧面问题,低于select_if(x, is.numeric)似乎不会从数据集中删除因子变量。

library(datasets) 
library(dplyr) 
library(ggplot2) 
library(beeswarm) 

data(iris) 
iris$ran_fac <- as.factor(c("A", "B", "C", "D", "E")) 

plotFunc <- function(x, na.rm = TRUE,...) { 
    plot_list = list() 
    nm <- select_if(x, is.numeric) 
    nm <- names(x) 
    for (i in seq_along(nm)) { 
     plots <-ggplot(x,aes_string("ran_fac", nm[i], color="Species")) + geom_quasirandom() + geom_boxplot() 
     plot_list[[i]] = plots 
     print(plots) 
     ggsave(plots,filename=paste("myplot",nm[i],".png",sep="")) 
    } 
} 

plotFunc(iris) 

Beeswarm plot

+0

请正确缩进您的代码。我为你修好了。 –

+0

如果您可以更清楚地了解期望的输出是什么,这将有所帮助。你想如何调用这个函数,你想得到什么结果? – MrFlick

+0

“select_if(is.numeric)'返回因子的例子在哪里?如果我运行sapply(虹膜,类)'我看到Species是一个因素,如果我运行'名称(dplyr :: select_if(iris,is.numeric))'它不会被返回。 – MrFlick

回答

0

好吧,我发现我的答案在这个问题上Passing arguments to ggplot in a wrapper。我调整了我的功能,并按照预期工作。现在我可以在开始时设置x轴和颜色。

library(datasets) 
library(dplyr) 
library(ggplot2) 

data(iris) 

iris$ran_fac <- as.factor(c("A", "B", "C", "D", "E")) 

xcol <- iris$ran_fac 
colorVar <- iris$Species 

plotFunc <- function(data, na.rm = TRUE, x, color,...) { 
    plot_list = list() 
    nm <- select_if(data, is.numeric) 
    nm <- names(nm) 
    for (i in seq_along(nm)) { 
    plots <- ggplot(data = data, aes_string(x = "xcol", nm[i], color = "colorVar")) + geom_quasirandom() + geom_boxplot() 
    plot_list[[i]] = plots 
    print(plots) 
    ggsave(plots, filename = paste("myplot", nm[i],".png", sep="")) 

    } 
} 

plotFunc(iris)