簡體   English   中英

facet_wrap按列填充

[英]facet_wrap fill by column

據我所知, facet_wrap按行填充。 以同樣的方式你可以指定如何用byrow填充matrix我希望你可以用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

我們如何填寫專欄?

此功能在github上的ggplot2的當前開發版本中實現。 這個提交實現了facet_wrap的新參數dir ,所以你只需這樣做

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

請注意,此功能目前在CRAN上的版本中不可用。

可以通過將分面變量轉換為因子然后重新調整它來完成。 在函數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排除的結果:

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM