facet_wrap按列填充 [英] facet_wrap fill by column

查看:218
本文介绍了facet_wrap按列填充的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

据我可以告诉 facet_wrap 逐行填写。以同样的方式,你可以指定如何用 byrow 填充矩阵,我希望你可以用facet_wrap 。我知道我可以重新排列一个因素的水平,以便在这个方面进行绘图,但是如果我忽略了一个更短的方法,这看起来像是一些工作。

  library(ggplot2)

ggplot(mtcars,aes(x = gear,y = mpg, fill = vs))+
geom_bar(position =dodge,stat =identity)+
facet_wrap(〜carb,ncol = 2)#b

我们如何填写列?

解决方案

可以通过将分面变量转换为因子并重新平衡它来完成。在函数 relevel.byrow 中,我使用了矩阵(...,byrow = T)矩阵转换为一个使用 c()函数的向量,然后重新校准因子。 $ c>#列数
nc < - 2
level.byrow < - 函数(vec,nc){
fac < - factor(vec)#if it not因子
mlev < - 矩阵(等级(fac),nrow = nc,byrow = T)
因子(fac,levels = c(mlev))
}

库(plyr)
ggplot(变换(mtcars,rcarb = level.byrow(carb,nc)),aes(x =齿轮,y = mpg,fill = vs))+
geom_bar (position =dodge,stat =identity)+
facet_wrap(〜rcarb,ncol = nc)

为方便起见,我使用了 plyr ,您可以简单地写下

  mtcars $ rcarb < -  level.byrow(mtcars $ carb,nc)

  mtcars2 < -  

子集(mtcars,carb!= 3)
ggplot(变换(mtcars2,rcarb = level.byrow(carb,nc)),aes(x =齿轮,y = mpg,fill = vs))+
geom_bar(position =dodge,stat =identity)+
facet_wrap(〜rcarb,ncol = nc)

不包括 carb == 3 的结果:


As far as I can tell facet_wrap fills by row. In the same way you can specify how to fill a matrix with byrow I was hoping you could do the same with facet_wrap. I know I could reorder the levels of a factor to plot in this maner but this seems like a bit of work if there's a shorter method that I'm overlooking.

library(ggplot2)

ggplot(mtcars, aes(x=gear,  y=mpg, fill=vs)) +
    geom_bar(position="dodge", stat="identity") + 
    facet_wrap(~ carb, ncol=2)  #fills by row

How can we fill by column?

解决方案

It can be done by converting faceting variable into factor and then re-leveling it. In function relevel.byrow I used matrix(..., byrow=T) for level ordering, then converted this matrix into a vector using c() function and then re-leveled factor.

#number of columns
nc <- 2
level.byrow <- function(vec, nc){
  fac <- factor(vec) #if it is not a factor
  mlev <- matrix(levels(fac), nrow=nc, byrow=T)
  factor(fac, levels= c(mlev))
}

library(plyr)
ggplot(transform(mtcars, rcarb=level.byrow(carb, nc)), aes(x=gear,  y=mpg, fill=vs)) +
  geom_bar(position="dodge", stat="identity") + 
  facet_wrap(~ rcarb, ncol=nc)

I used plyr for convenience, you can just simply write

mtcars$rcarb <- level.byrow(mtcars$carb, nc)

This also works when we don't have full facet structure, but gives couple warnings.

mtcars2 <- subset(mtcars, carb!=3)
ggplot(transform(mtcars2, rcarb=level.byrow(carb, nc)), aes(x=gear,  y=mpg, fill=vs)) +
  geom_bar(position="dodge", stat="identity") + 
  facet_wrap(~ rcarb, ncol=nc)

Result with carb==3 excluded:

这篇关于facet_wrap按列填充的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆