4

我无法打印缺少数据的地图。

我能够生成一个“空”的 shapefile:

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)

在此处输入图像描述 然后我将数据添加到 shapefile

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 保留所有边界/区域。我怎样才能保留这些边界/区域?除了创建一个“完整”数据集之外,没有其他方法,其中包括每个缺失区域的 NA 行?

4

1 回答 1

3

我认为您可以简单地将参数添加na.value到对 scale_fill_gradient 的调用中。这是使用包中包含的北卡罗来纳州 shapefile 的可重现示例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")

具有 NA 值的 scale_fill_discrete sf

由于我无法重现您的特定示例,我猜您想使用不同类型的join,否则 shapefile 将保留上述缺失的行(和缺失的形状)。

于 2017-11-16T22:04:11.970 回答