geom_blank丢弃NA

时间:2016-09-22 20:37:18

标签: r ggplot2

使用geom_blank我想添加一些新的因子级别,但我似乎无法做到这一点保持NA级别

library('ggplot2')
pl <- ggplot(data.frame(x = factor(c(1:2, NA)), y = 1), aes(x, y)) + geom_point()
pl

enter image description here

pl + geom_blank(data = data.frame(x = addNA(factor(c(0:3, NA))), y = 1))

enter image description here

我想使用geom_blank

将x设置为0,1,2,3,NA

2 个答案:

答案 0 :(得分:9)

正如我在评论中所希望的那样,如果情节已经完成,解决方法可以重新排序图层,这对于ggplots来说应该是有用的。

library('ggplot2')
pl <- ggplot(data.frame(x = factor(c(1:2, NA)), y = 1), aes(x, y)) +
  geom_point() +
  geom_blank(data = data.frame(x = addNA(factor(c(0:3, NA))), y = 1))


## not what I want
pl


## this is what I want
pl$layers <- rev(pl$layers)
pl

enter image description here

答案 1 :(得分:1)

不幸的是,如果您有多个具有单独数据集的图层,则可以覆盖因子级别。您可以通过在离散比例上设置限制来解决此问题:

pl <- ggplot(data.frame(x = factor(c(1:2, NA)), y = 1), aes(x, y)) + geom_point()    
pl +
  geom_blank(data = data.frame(x = addNA(factor(c(0:3, NA))), y = 1)) +
  scale_x_discrete(limits=addNA(factor(c(0:3, NA))))

出于某种原因,这会扰乱轴上的扩展,NA断点位于右边缘。

[Almost Working[1]

可以通过手动设置扩展参数来解决这个问题。

pl <- ggplot(data.frame(x = factor(c(1:2, NA)), y = 1), aes(x, y)) + geom_point()
pl +
  geom_blank(data = data.frame(x = addNA(factor(c(0:3, NA))), y = 1)) +
  scale_x_discrete(limits=addNA(factor(c(0:3, NA))), expand=c(0.25,0.25))

Working, but must manually specify expand