我有从M1到M11的理论范围因子。在数据M1至M3和M5不存在。我怎么能ggplot2 barplot与所有Ms,不仅是现有的,所以M1到M3和M5也显示在x轴上?
答案 0 :(得分: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
。
答案 1 :(得分: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)
将产生