R 如何使用ggplot绘制多因子列?

R 如何使用ggplot绘制多因子列?,r,plot,ggplot2,dplyr,R,Plot,Ggplot2,Dplyr,我尝试一次绘制多个因子列,使用ggplot2作为绘图引擎 直接绘制多个公制列: 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() + face

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

直接绘制多个公制列:

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

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

diamonds %>% 
  select_if(is.factor) %>% 
  ggplot(aes(x = .[[1]])) + geom_bar()
其中,
[[1]]
应替换为某个列占位符(因此在这里我直接命名了该列,这是我想要避免的,因为实际上我有大量的列)


for循环可能会完成这项工作,但我希望使用dplyr实现这一点。

这里的技巧是在
方面
调用中使用
scales=free
。例如:

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


不幸的是,自由音阶和
coord\u flip
玩得不好。您可以从中使用
geom_barh
。或者您可以在每列上使用
lappy
来获得
ggplot
对象的列表,并使用
cowplot
包将它们缝合在一个图形中。

可能不如@Axeman优雅,但也可以工作,并与
coord\u 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)
库(gridExtra)
gg_巴%
选择_if(否定(是数值))%>%
lappy(,函数(x)gg_bar(x))->gg_bar_列表
do.call(grid.arrange,gg\u bar\u列表)


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

你能解释一下你认为什么是合理的结果,即你的第二个数字是如何与你期望的输出不同的?主要的问题是每个绘图没有自己的Y轴(因此字母排序毫无意义)?#mkt,谢谢你的评论,#Axeman有一个好主意,这就是我在寻找的。我刚刚想到,
lappy
也可能是一种方式,使用
coord_flip
@AxemanSee而不是
grid可能更容易。排列
以进行自动对齐和子地块注释。可以将注释用作变量标签,而不显示y轴标签。