facet_wrap通过栏中填入(facet_wrap fill by column)

2019-08-01 11:46发布

至于我可以告诉facet_wrap按行填充。 以同样的方式,你可以指定如何填充matrixbyrow我希望你可以做同样的facet_wrap。 我知道我可以重新排序的一个因素的水平,这满耳绘制但是这似乎有点像工作的,如果有那我俯瞰较短的方法。

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

我们怎样才能填补列?

Answer 1:

它可以通过小面的变量转化为因子来完成,然后重新练级吧。 在功能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除外:



Answer 2:

该功能在GitHub上GGPLOT2的当前的开发版本中实现。 这个承诺实现了一个新的参数dirfacet_wrap ,所以你根本就

## "v" for vertical or "h" for horizontal (the default)    
ggplot(...) + facet_wrap(~ carb, ncol=2, dir="v")

注意,此功能目前无法使用在CRAN的版本。



文章来源: facet_wrap fill by column
标签: r ggplot2