Подтвердить что ты не робот

Geom_blank падает NA

Используя geom_blank, я хочу добавить некоторые новые уровни факторов, но я не могу этого сделать и сохранить уровень NA

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

введите описание изображения здесь

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

введите описание изображения здесь

Я хотел бы иметь x в 0,1,2,3, NA, используя geom_blank

4b9b3361

Ответ 1

Как я надеялся в комментариях, обход может быть переупорядочен слоями, если сюжет уже сделан, и это должно работать для 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

введите описание изображения здесь

Ответ 2

К сожалению, когда у вас несколько уровней с отдельными наборами данных, уровни факторов могут быть перепутаны. Вы можете исправить это, установив ограничения на дискретную шкалу:

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]

Это можно устранить, вручную установив параметр expand по своему вкусу.

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))

Работает, но нужно вручную указать expand