1. ホーム
  2. r

[解決済み] ggplot2 未使用レベルを保持する barplot

2022-05-14 14:44:43

質問

未使用のレベル(カウントが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()

上の例では、Cをカウント0にしてプロットしてほしいのですが、全くありません...。

よろしくお願いします。 Ulrik

編集します。

これは私が望むことをします

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() を使って頻度を計算し、プロットすることだと思います。

どのように解決するのですか?

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

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 はカウントがゼロのビンを扱います。以下の項目をチェックしてください。 ドキュメント .