14

私が知る限りfacet_wrap、行ごとに塗りつぶされています。で埋める方法を指定できるのと同じ方法で、facet_wrap でも同じことができると期待していましたmatrixbyrowこの方法で因子のレベルを並べ替えてプロットできることは知っていますが、見落としているより短い方法がある場合、これは少し手間がかかるようです。

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

列ごとに入力するにはどうすればよいですか?

4

2 に答える 2

6

これは、ファセット変数を因子に変換してから再平準化することで実行できます。関数では、レベルの順序付け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除外した結果:

ここに画像の説明を入力

于 2012-10-15T09:58:24.137 に答える