ggplot2でファセットの未使用レベルを削除する[終了]


19

ggplot2sファセットで使用されていないレベルをドロップすることは可能ですか?これは私のコードです:

tab = as.data.frame(cbind(groups = mtcars$cyl, names = row.names(mtcars), val = mtcars$mpg, N = mtcars$disp))
tab$N = as.numeric(tab$N)

ggplot(tab, aes(names,val)) + 
geom_point() + coord_flip() + 
theme_bw() + 
facet_grid(groups ~ ., drop=TRUE)#, scales="free", as.table=F, space="free")

drop=Tスイッチを試しましたが、役に立ちません。何が間違っていますか?


このような純粋なプログラミング(統計ではない)の質問については、StackOverflow
smci

回答:


27

サンプルデータには、削除する未使用のレベルはありません。この例の動作を確認します。

dat <- data.frame(x = runif(12),
                  y = runif(12),
                  grp1 = factor(rep(letters[1:4],times = 3)),
                  grp2 = factor(rep(LETTERS[1:2],times = 6)))

levels(dat$grp2) <- LETTERS[1:3]

ggplot(dat,aes(x = x,y = y)) + 
    facet_grid(grp1~grp2,drop = FALSE) + 
    geom_point()

ggplot(dat,aes(x = x,y = y)) + 
    facet_grid(grp1~grp2,drop = TRUE) + 
    geom_point()

各ファセットの垂直軸にプロットする因子を変更しようとしている可能性があります。その場合、scales引数を設定して使用する必要がありますfacet_wrap

ggplot(tab, aes(names,val)) + 
    geom_point() + coord_flip() + 
    theme_bw() + 
    facet_wrap(~groups,nrow = 3,scales = "free_x")

ああ、私は今それが何をするかを見る。私の意図は、ファセットごとに実際にグループ化されるすべてのファセットでそれらのレベルのみをプロットすることでした。同様に、私のタブの例を使用しますdotchart(as.numeric(tab$val), labels=tab$names, groups=tab$groups)。出来ますか?
mrrrau

@mrrrauはい、私の編集を参照してください。
ジョラン

21
将来の読者のために、drop中に使用されなかった任意の因子レベル低下の任意ながら、プロットの面をscalesプロットの特定のファセットに使用されなかった任意の因子レベルを低下します。この投稿から理解するにはしばらく時間がかかったので、他の人の手間を省くためにここで明確にしたいと思いました。
ジェイクフィッシャー

@JakeFisherこれを指摘してくれてありがとう!とても助かります!
スティーブン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.