0

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

4

2 回答 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=FALSEdrop=TRUE在情节时间。

于 2014-05-01T11:44:54.470 回答
1

您的问题不可重现,因此我将在独立代码上进行说明

如果你会跑

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

你会得到

在此处输入图像描述

如果您想添加未使用的级别,factor(cyl)可以scale_x_discrete使用limitsdrop = 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 回答