可以通过将分面变量转换为因子然后重新调整它来完成。在relevel.byrow
我用于matrix(..., byrow=T)
级别排序的函数中,然后使用函数将此矩阵转换为向量c()
,然后重新调整因子。
#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)
我plyr
为了方便起见,你可以简单地写
mtcars$rcarb <- level.byrow(mtcars$carb, nc)
当我们没有完整的构面结构时,这也有效,但会给出一些警告。
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)
carb==3
排除的结果: