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
Ответы
Ответ 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]()