2

我有这个数据框:

set.seed(50)
data <- data.frame(age=c(rep("juv", 10), rep("ad", 10)),
                   sex=c(rep("m", 10), rep("f", 10)),
                   size=c(rep("large", 10), rep("small", 10)),
                   length=rnorm(20),
                   width=rnorm(20),
                   height=rnorm(20))

使用这个数据框,我需要制作 9 个散点图,将每个连续变量与每个因子变量进行对比。所以我需要制作这些散点图:

library(ggplot2)

ggplot(data, aes(length, width, group=age, colour=age)) + geom_point()
ggplot(data, aes(length, height, group=age, colour=age)) + geom_point()
ggplot(data, aes(width, height, group=age, colour=age)) + geom_point()

ggplot(data, aes(length, width, group=sex, colour=sex)) + geom_point()
ggplot(data, aes(length, height, group=sex, colour=sex)) + geom_point()
ggplot(data, aes(width, height, group=sex, colour=sex)) + geom_point()

ggplot(data, aes(length, width, group=size, colour=size)) + geom_point()
ggplot(data, aes(length, height, group=size, colour=size)) + geom_point()
ggplot(data, aes(width, height, group=size, colour=size)) + geom_point()

但是,我希望能够使用函数制作这 9 个散点图。像这样的东西:

makeScatterplots <- function(x.variable, y.variable, my.factor){

  ggplot(dataframe, aes(x.variable, y.variable, group=my.factor, colour=my.factor)) + geom_point()

}

如何制作一个函数,它采用 x 变量、y 变量和分组因子来计算这 9 个散点图?

4

1 回答 1

4

使用aes_string()insideggplot()和 supply x.variableandy.variable作为名称(字符),也使用print()around ggplot()call。

makeScatterplots <- function(dataframe,x.variable, y.variable, my.factor){
  print(ggplot(dataframe, aes_string(x=x.variable,y= y.variable, 
                     group=my.factor, colour=my.factor)) + geom_point())  
}

makeScatterplots(data,"length","width","age")

更新

将这个和以前的OP 问题合并在一起

该函数将生成 x、y 和因子变量的所有可能组合。

makeScatterplots <- function(dataframe,x.variable, y.variable, my.factor){
  gg<-expand.grid(x.variable,y.variable,my.factor)
  gg<-data.frame(lapply(gg, as.character), stringsAsFactors=FALSE)
  apply(gg,1,function(x) ggplot(data,aes_string(x=x[1],y=x[2],color=x[3]))+geom_point())
}
于 2013-05-28T08:41:39.483 回答