棒グラフで未使用のレベルを保持する 質問する

棒グラフで未使用のレベルを保持する 質問する

未使用のレベル(つまり、カウントが0のレベル)を棒グラフにプロットしたいのですが、未使用のレベルは削除されてしまい、どうやって保存すればよいのかわかりません。

df <- data.frame(type=c("A", "A", "A", "B", "B"), group=rep("group1", 5))
df$type <- factor(df$type, levels=c("A","B", "C"))

ggplot(df, aes(x=group, fill=type)) + geom_bar()

上記の例では、カウント 0 でプロットされた C を確認したいのですが、まったく表示されません...

助けてくれてありがとう、ウルリック

編集:

これは私が望んでいることだ

df <- data.frame(type=c("A", "A", "A", "B", "B"), group=rep("group1", 5))
df1 <- data.frame(type=c("A", "A", "A", "B", "B", "A", "A", "C", "B", "B"), group=c(rep("group1", 5),rep("group2", 5)))

df$type <- factor(df$type, levels=c("A","B", "C"))
df1$type <- factor(df1$type, levels=c("A","B", "C"))
df <- data.frame(table(df))

df1 <- data.frame(table(df1))

ggplot(df, aes(x=group, y=Freq, fill=type)) + geom_bar(position="dodge")
ggplot(df1, aes(x=group, y=Freq, fill=type)) + geom_bar(position="dodge")

解決策はtable()を使って頻度を計算し、プロットすることだと思います

ベストアンサー1

次のように、両方のスケール (fill と x) で drop=FALSE を設定する必要があります。

library(ggplot2)
df <- data.frame(type=c("A", "A", "A", "B", "B"), group=rep("group1", 5))
df1 <- data.frame(type=c("A", "A", "A", "B", "B", "A", "A", "C", "B", "B"), group=c(rep("group1", 5),rep("group2", 5)))
df$type <- factor(df$type, levels=c("A","B", "C"))
df1$type <- factor(df1$type, levels=c("A","B", "C"))

plt <-  ggplot(df, aes(x=type, fill=type)) + 
          geom_bar(position='dodge') + 
          scale_fill_discrete(drop=FALSE) +
          scale_x_discrete(drop=FALSE)
plt1 <- ggplot(df1, aes(x=type, fill=type)) + 
          geom_bar(position='dodge') + 
          scale_fill_discrete(drop=FALSE) +
          scale_x_discrete(drop=FALSE)

編集:

これはうまくいくと確信しています。xをgroupではなくtypeに変更し、position='dodge'にするのを忘れました。貼り付けてテストしてください。stat_binはゼロカウントのビンを処理します。ドキュメント

おすすめ記事