我正在使用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)
我想要的是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)
但我确信我必须错过一个ggplot选项,可以在不破解数据的情况下完成此任务。
答案 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"))
会给你这张图:
我个人认为这很可怕。