我将数据作为有序因子,级别为1,2,3,4,5。 (这是李克特标度数据。)我想使用ggplot创建计数的条形图,但这必须包括所有级别,甚至包括计数为零的级别。这是一个示例数据帧,其零计数级别等于2。

library(ggplot2)

foo <- structure(list(feed.n.1.50..3. = structure(c(4L, 4L, 4L, 4L,
4L, 5L, 5L, 4L, 1L, 1L,1L, 1L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 5L, 5L, 4L, 5L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
5L, 3L, 4L, 4L, 3L, 4L, 4L, 3L, 4L, 5L, 4L, 4L, 4L, 4L), .Label = c("1",
"2", "3", "4", "5"), class = c("ordered", "factor"))), .Names = "answers", row.names = c(NA,
-50L), class = "data.frame")

table(foo) # satisfy myself the level 2 has zero entries

ggplot(foo,aes(answers)) + geom_bar(stat="bin") # stat="bin" is not needed, but there for clarity
stat_bin()具有参数drop,记录为
drop: If TRUE, remove all bins with zero counts

但是默认设置为FALSE,因此我希望保持水平。有没有一种简单的方法可以使用ggplot保持因子的所有水平?

最佳答案

级别的降低是按比例完成的(默认),因此将scale_x_discrete()drop=FALSE参数一起使用以显示所有级别。

ggplot(foo,aes(answers)) + geom_bar()+
  scale_x_discrete(drop=FALSE)

10-06 07:14