将不存在的因子添加到ggplot2 barplot

时间:2014-05-01 08:12:29

标签: r ggplot2 factors

我有从M1到M11的理论范围因子。在数据M1至M3和M5不存在。我怎么能ggplot2 barplot与所有Ms,不仅是现有的,所以M1到M3和M5也显示在x轴上?

2 个答案:

答案 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=FALSEdrop=TRUE

答案 1 :(得分:1)

您的问题不可复制,因此我将在一个独立代码上进行说明

如果你要跑

library(ggplot2)
ggplot(mtcars, aes(factor(cyl))) + geom_bar()

你会得到

enter image description here

如果您希望将未使用的级别添加到factor(cyl),则可以使用scale_x_discretelimits使用drop = F

例如

ggplot(mtcars, aes(factor(cyl))) + geom_bar() + 
scale_x_discrete(limits = c(1, 2, levels(factor(mtcars$cyl)), 10), drop=FALSE)

将产生

enter image description here