如何用ggplot绘制多因子列?

时间:2016-07-04 12:03:12

标签: r plot ggplot2 dplyr

我试图一次性绘制多个因子列,使用ggplot2作为绘图引擎。

直接绘制多个指标列:

FALSE

plot multiple quantitative variables

但是,我没有成功地在一次拍摄中绘制多个 factor (定性)列。我想以编程方式选择列,即直接命名它们。

我尝试了这个,但会产生合理的结果:

merge

enter image description here

我认为可能有这样的解决方案:

library(ggplot2)
library(dplyr) # dplyr 0.5.0 select_if
library(purrr)
data(diamonds)


diamonds %>% 
  select_if(is.numeric) %>% 
  gather %>% 
  ggplot(aes(x = value)) + 
  geom_histogram() + 
  facet_wrap(~key)

diamonds %>% select_if(is.factor) %>% gather %>% ggplot(aes(x = value)) + geom_bar() + facet_wrap(~key) + coord_flip() 应该被某个列占位符替换(所以我在这里直接命名了列,我想避免使用,因为我实际上有很多列。)

for循环可能会完成这项工作,但我想用dplyr到达那里。

2 个答案:

答案 0 :(得分:3)

这里的诀窍是在scales = free电话中使用facet。例如:

diamonds %>% 
    select_if(is.factor) %>% 
    gather %>% 
    ggplot(aes(x = value)) + geom_bar() +
    facet_wrap(~key, scales = 'free') +
    theme_bw() +
    theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5))

enter image description here

不幸的是,免费比例和coord_flip不会很好。您可以使用the ggstance package中的geom_barh。或者,您可以在每列上使用lapply来获取ggplot个对象的列表,并使用cowplot包将它们拼接在一起。

答案 1 :(得分:1)

可能不如@Axeman优雅,但也在工作,并与coord_flip合作:

library(gridExtra)


gg_bar <- function(x, ...){
  { 
    ggplot(data_frame(x), aes(x = x)) + 
      geom_bar() +
      coord_flip() 
  }
}

diamonds %>% 
  select_if(negate(is.numeric)) %>% 
  lapply(., function(x) gg_bar(x)) -> gg_bar_list

do.call(grid.arrange, gg_bar_list)

enter image description here

但是,没有显示变量(“x”)的名称,这不太漂亮。