将变量传递给ggmosaic

时间:2017-11-04 19:13:07

标签: r ggplot2

我有一个名为panel的数据集,它有多个感兴趣的分类变量。

我想编写一个程序,使用for循环绘制每对的马赛克图 vars是具有以下列名称的向量:

vars
 [1] "region"   "urb"      "sex"      "race"    "grade"   "dt01"   "dt02"     "dt03"    
 [9] "dt06"     "dt07"     "exercise" "kq7"

这是我的计划:

library(ggmosaic)

for (i in 1:12){
  for (j in 1:12){
    a <- vars[i]
    b <- vars[j]
    if (j > i){
      m <- ggplot(data = panel) 
      m <- m + geom_mosaic(aes(x = product(a), fill = b))
    }
    print(m)
  }
}  

这段代码给了我一个大块的情节。

plot

当我像下面的代码一样手动编写列名时,它可以正常工作

ggplot(data = panel) +
  geom_mosaic(aes(x = product(region), fill = urb))

我尝试aes_string,但没有帮助。

1 个答案:

答案 0 :(得分:1)

两个需要考虑的建议。

1:生成你的对&amp;使用单个循环来完成它们,而不是通过重复组合的双循环。

vars <- c("region", "urb", "sex", "race", "grade", "dt01",     
          "dt02", "dt03", "dt06", "dt07", "exercise", "kq7")
vars.pair <- combn(vars, 2, simplify = FALSE) # list of all valid pairs

> head(vars.pair)
[[1]]
[1] "region" "urb"   

[[2]]
[1] "region" "sex"   

[[3]]
[1] "region" "race"  

[[4]]
[1] "region" "grade" 

[[5]]
[1] "region" "dt01"  

[[6]]
[1] "region" "dt02"  

2:在aes_string()中,确保x的美学映射评估为"product(variable.name)"而不是product("variable.name")

for(i in seq_along(vars.pair)){

  p1 <- vars.pair[[i]][1]
  p2 <- vars.pair[[i]][2]

  m <- ggplot(data = panel) +
    geom_mosaic(aes_string(x = paste0("product(", p1, ")"),
                           fill = p2))
  print(m)

}