R 如何使用ggplot绘制多因子列?
我尝试一次绘制多个因子列,使用ggplot2作为绘图引擎 直接绘制多个公制列: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
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轴标签。