未使用のレベル(つまり、カウントが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はゼロカウントのビンを処理します。ドキュメント。