我有一个从 M1 到 M11 的理论因子范围。在数据 M1 到 M3 和 M5 不存在。我怎样才能 ggplot2 barplot 与所有 Ms,不仅是现有的,以便 M1 到 M3 和 M5 也显示在 x 轴上?
问问题
674 次
2 回答
2
如果您的因子能够在某个时候具有所有这些水平,那么设置因子的水平比在您设置因子时将其添加到限制更有意义ggplot
。所以:
制作cyl
一个以 M 开头的因子(因此仅适用于 M4、M6 和 M8)
mtcars$cyl=factor(paste("M",mtcars$cyl,sep=""))
增加水平:
mtcars$cyl = factor(mtcars$cyl, levels=paste("M",1:10,sep=""))
现在它只是drop=FALSE
你的一个ggplot
:
ggplot(mtcars, aes(cyl)) + geom_bar() + scale_x_discrete(drop=FALSE)
为什么我认为这更好?好吧,因为您将数据的一个方面(可能的级别)与数据本身联系起来,而不是绘图功能。假设您有一堆绘图函数,现在您必须在每个函数中编写该级别修复代码。将可能的水平放入因子中,该信息将与数据一起携带。您需要做的就是决定drop=FALSE
或drop=TRUE
在情节时间。
于 2014-05-01T11:44:54.470 回答
1
您的问题不可重现,因此我将在独立代码上进行说明
如果你会跑
library(ggplot2)
ggplot(mtcars, aes(factor(cyl))) + geom_bar()
你会得到
如果您想添加未使用的级别,factor(cyl)
可以scale_x_discrete
使用limits
和drop = F
。
例如
ggplot(mtcars, aes(factor(cyl))) + geom_bar() +
scale_x_discrete(limits = c(1, 2, levels(factor(mtcars$cyl)), 10), drop=FALSE)
会产生
于 2014-05-01T10:20:27.120 回答