Области с отсутствующими данными удаляются с карты geom_sf / ggplot2. Почему?

У меня проблемы с печатью карт с недостающими данными.

Я могу создать «пустой» шейп-файл:

empty.shape.sf <- 
  ggplot(BiH.shape.sf)+
  geom_sf(fill="grey",colour="black")+
  theme(legend.position="none",
        axis.title=element_blank(),
        axis.text=element_blank(),
        axis.ticks = element_blank(),
        strip.text.y = element_text(size = 10),
        panel.background=element_rect(fill="white"))

print(empty.shape.sf)

введите здесь описание изображения Затем я добавляю данные в шейп-файл

df.shape <- dplyr::left_join(BiH.shape.sf, data, by="ID_3")

и создайте новые карты.

data.map <- df.shape%>%
  filter(year==2000|year==2004)%>%
  ggplot()+
  geom_sf(aes(fill=res), colour="black")+
  theme(legend.position="none",
        axis.title=element_blank(),
        axis.text=element_blank(),
        axis.ticks = element_blank(),
        strip.text.y = element_text(size = 10),
        panel.background=element_rect(fill="white"))+
  scale_fill_gradient(low="blue", high="red", limits=c(0,100))+
  facet_wrap(~year)

print(data.map)

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

Почему области, для которых проецируемые данные отсутствуют без границ / отброшены? Я бы предположил, что при использовании left_join все границы / области сохранятся. Как я могу сохранить эти границы / области? Нет ли другого способа, кроме как создать «полный» набор данных, который включает строки с НП для каждой отсутствующей области?


person zoowalk    schedule 31.10.2017    source источник
comment
См. это тема, чтобы узнать, как добавлять значения NA к картам с градиентной заливкой. Трудно делать какие-либо предложения, относящиеся к вашей карте и данным, поскольку вы не указали данные, которые вы используете в своем вопросе.   -  person Jan Boyer    schedule 31.10.2017
comment
ggplot2 не отбрасывает NA незаметно. Было ли вам предупреждено об этом?   -  person seasmith    schedule 20.11.2017


Ответы (1)


Я думаю, вы можете просто добавить аргумент na.value к вашему вызову scale_fill_gradient. Вот воспроизводимый пример с использованием шейп-файла Северной Каролины, включенного в пакет sf:

library(ggplot2)
library(sf)
nc <- sf::st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)
nc$BIR74[1] <- NA
nc %>% ggplot()+
  geom_sf(aes(fill=BIR74), colour="white")+
  theme(legend.position="none",
        axis.title=element_blank(),
        axis.text=element_blank(),
        axis.ticks = element_blank(),
        strip.text.y = element_text(size = 10),
        panel.background=element_rect(fill="white"))+
  scale_fill_gradient(low="blue", high="red",na.value = "black")

scale_fill_discrete SF со значением NA

Поскольку я не могу воспроизвести ваш конкретный пример, я предполагаю, что вы хотите использовать другой тип join, иначе шейп-файл сохранит эти недостающие строки (и недостающие формы), как упоминалось.

person Michael Lee    schedule 16.11.2017
comment
Я не думаю, что это решение. Если я запускаю ваш пример и удаляю аргумент na.value, мы просто получаем серую область, представляющую NA, а не черную. Бьюсь об заклад, эта проблема была вызвана filter () - person sebdalgarno; 26.02.2018