首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将变量传递给ggmosaic

将变量传递给ggmosaic
EN

Stack Overflow用户
提问于 2017-11-05 03:13:07
回答 1查看 154关注 0票数 0

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

我想写一个程序,将绘制每一对使用for循环马赛克图。

vars是具有以下列名的向量:

代码语言:javascript
复制
vars
 [1] "region"   "urb"      "sex"      "race"    "grade"   "dt01"   "dt02"     "dt03"    
 [9] "dt06"     "dt07"     "exercise" "kq7"

这是我的程序:

代码语言:javascript
复制
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)
  }
}  

这段代码给了我一个包含一个大块的图。

当我手动编写列名时,如以下代码所示,它可以正常工作

代码语言:javascript
复制
ggplot(data = panel) +
  geom_mosaic(aes(x = product(region), fill = urb))

我尝试了aes_string,但没有任何帮助。

EN

回答 1

Stack Overflow用户

发布于 2017-11-05 13:37:15

需要考虑的两个建议。

1:生成您的配对&使用单循环来遍历它们,而不是通过重复组合的双循环。

代码语言:javascript
复制
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")

代码语言:javascript
复制
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)

}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47114565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档