私は、複数レベルのグループ化されたボックスプロットに対して「空きスペース」を維持しようとしています。ggplot2:空の第2レベルカテゴリのスペースを強制する
set.seed(42)
n <- 100
dat <- data.frame(x=runif(n),
cat1=sample(letters[1:4], size=n, replace=TRUE),
cat2=sample(LETTERS[1:3], size=n, replace=TRUE))
ggplot(dat, aes(cat1, x)) + geom_boxplot(aes(fill=cat2))
私はグループのいずれかが空であることを強制する場合:
dat <- subset(dat, ! (cat1 == 'b' & cat2 == 'B'))
table(dat$cat1, dat$cat2)
##
## A B C
## a 9 9 7
## b 8 0 5
## c 13 11 6
## d 11 10 5
ggplot(dat, aes(cat1, x)) + geom_boxplot(aes(fill=cat2))
第二のグループ、 "b" は、今スペースを埋めるように拡張されます。私がしたいことは次のとおりです。
SO 9818835(表示されるように、空のレベルを強制的に)、トップレベルで正常に動作しますが、私はそれが第二レベルのために働くために取得する方法を見つけ出すことはできませんカテゴリ。 scale_x_discrete(...)
で、Iは、設定しようとした:
breaks=letters[1:4]
breaks=LETTERS[1:3]
breaks=list(letters[1:4], LETTERS[1:3])
(スタブ)breaks=NULL
breaks=func
func <- function(x, ...) { browser(); 1; }
。letters[1:4]
のみを提供し、第2レベルのプロンプトを表示しませんでした。
interactions(letters[1:4], LETTERS[1:3])
を使用すると、まだ空き領域が残っていません。私はx
値の範囲外に注入し、それをscale_y_continuous(limits)
と強制的に強制することで回避策を試みましたが、ggplot2
は私にとってはスマートすぎて、再びギャップを閉じます。
解決策は洗練されています(つまり、ggplot2
のメカニズムに「正しい」)?
のようなデータがどのようにエレガントな、それはする必要がない「裏をかく」にしようとしないのだろうか?これらのレコードの 'x'をゼロに設定するだけで、かなり合理的に見えるものが作成されているようです。 – akhmed
これはプログラム的にエレガントです(私はすでにそれを試していましたが、 'scale_y_continuous(limits)'は駄目です)私の視覚化については、少しOCDです:私はいつもプロットの一番下の気を散らすラインを見つめます。 – r2evans
さらに、「a lineはデータなし」と「a lineは値0の単一データポイントを示します」との間に統計的な違いがあります。 – r2evans