首页 > 解决方案 > 散点图,按类别变量着色,分面超过 r 中的类别变量

问题描述

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

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))

良好的输出

但是,如果我尝试将它包装在一个函数中并 lapply,则绘图的工作方式不同:

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))
       })

输出不良

对于我拥有的每个数字变量,都有其中一种类型的图。我在应用程序中缺少什么?

标签: rggplot2lapply

解决方案


在 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))
       })

推荐阅读