防止ggplot分面直方图中的因子水平下降

时间:2015-11-02 06:02:02

标签: r ggplot2

我正在使用ggplot(v1.0.1)绘制直方图,条形图填充映射到二进制State因子并使用position = "dodge"。直方图由第二个Group因子构成。当组中不存在State因子的一个级别时,该方面的图不同于存在两个级别的图。以下玩具示例说明了这一点:

set.seed(1234)
states <- c("Alive", "Dead")
dat <- data.frame(Group = rep(LETTERS[1:2], each=100), 
              Measure = rnorm(200, 50, 10),
              State = c(rep(states, 50), rep("Alive", 100)))

ggplot() +
  geom_histogram(data=dat, aes(x=Measure, fill=State), 
                 position="dodge", binwidth=5) +
  facet_wrap(~ Group)

default behaviour with level dropped from facet B

我想要的是B组的方面中的条形与A组具有相同的宽度和相对位置。我认为facet_wrap(~ Group, drop = FALSE)可以实现此目的但它似乎没有影响。以下解决方案实现了理想的情节:

dat <- rbind(dat, data.frame(Group="B", Measure=50, State=NA))
ggplot() +
  geom_histogram(data=dat, aes(x=Measure, fill=State), 
                 position="dodge", binwidth=5) +
  scale_fill_discrete(na.value = NA) +
  facet_wrap(~ Group)

work-around to give same bin width and position in facets

但我确信我必须错过一个ggplot选项,可以在不破解数据的情况下完成此任务。

1 个答案:

答案 0 :(得分:4)

简短的回答是;遗憾的是,没有ggplot选项可以为您实现这一目标。有几种解决方法。

第一个,您可能已经找到的最简单的选项,添加NA&#39>。

第二个选项是手动调整条形的宽度,就像在https://hadoop.apache.org/docs/current/api/问题的第一个答案中一样。

第三个选项取自@Roland的建议:不要&#34;躲避&#34;但使用透明度:

ggplot() +
  geom_histogram(data=dat, aes(x=Measure, fill=State), 
                 position=position_identity(), binwidth=5, alpha=0.5) +
  facet_wrap(~ Group) +
  #change the colors and background, to improve visibility
  scale_fill_manual(values=c("red","blue")) +
  theme(panel.background = element_rect(fill = "transparent",colour = "black"))

会给你这张图:

this

我个人认为这很可怕。