我正在尝试在一个循环中创建几个图(使用ggplot2),并且我使用下面的函数。
我使用了虹膜数据集,并添加了一个名为"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)
发布于 2017-05-08 09:56:10
好了,我在这个问题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)
https://stackoverflow.com/questions/43836374
复制