facet_wrap按列填充 [英] facet_wrap fill by column
问题描述
据我可以告诉 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屋!