它可以通過將分面變量轉換爲因子然後重新對其進行重新平衡來完成。在函數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
排除:

好問題。在'ggplot2' [回購](https://github.com/hadley/ggplot2/issues?labels=feature&page=1&state=open)上將它作爲Winston的功能請求發佈。 :) – Maiasaura
完成:https://github.com/hadley/ggplot2/issues/695 –
雖然也許我在錯誤的地方添加了請求,因爲鏈接與您的鏈接不匹配。 –