散点图,由类别变量着色,在r中的类别变量之上

时间:2019-03-21 19:53:54

标签: r ggplot2 lapply

我有一个带有许多数字和分类变量的数据框。

data <- data.frame(dep_var = ...,
              cat1 = ...,
              cat2 = ...,
              ...
              num1 = ...,
              num2 = ...,
              ...)

如果我选择一个数字特征,则可以将其相对于因变量(由分类变量组成)进行绘制(忽略图例占据页面一半的事实-我正在对集群进行高级查找)

cat_cols <- c("cat1", "cat2",... , "cat6")

data %>% select(dep_var, var1, cat_cols) %>%
  gather(category, value, -c(dep_var, var1)) %>%
  ggplot(aes(x=var1, y=dep_var))+
  facet_wrap(~ category) + geom_point(aes(color=value))

Good output

但是,如果我尝试将其包装到函数中并套用,则绘图将无法以相同的方式工作:

num_cols <- ("num1", "num2", "num3",...)

lapply(names(data[num_cols]), 
       function(x) {
        data %>% select(dep_var, x, cat_cols) %>%
           gather(category, value, -c(dep_var, x)) %>%
           ggplot(aes(x=x, y=dep_var))+
           facet_wrap(~ category) + geom_point(aes(color=value))
       })

Bad Output

对于我拥有的每个数字变量,都有一种绘图类型。我在快活中想念什么?

1 个答案:

答案 0 :(得分:0)

在aes调用中使用get()函数将字符串转换回“裸名”即可解决问题:

lapply(names(data[num_cols]), 
       function(x) {
        data %>% select(dep_var, x, cat_cols) %>%
           gather(category, value, -c(dep_var, x)) %>%
           ggplot(aes(x=get(x), y=dep_var))+             //Fix here with get() function
           facet_wrap(~ category) + geom_point(aes(color=value))
       })