geom_sf 具有连续值和 NA ggplot R

geom_sf with continuous values and NA ggplot R

我有一个我想绘制的科幻对象。这是瑞典各县(21 个县)的地图,对于每个县,我都有一个值。然而,该值可以是正值或负值,甚至是 NA。我想在瑞典绘制地图并将所有具有 NA 的县着色为白色,然后为所有连续值使用渐变(取决于值)为所有其他县着色。但是当我尝试时,我只收到此错误消息:错误:提供给离散比例的连续值

这不是我的真实数据,但我不确定如何演示 sf-object。所以这里只是一个带有县名和值的数据框(所以没有坐标或任何东西):

data <- data.frame(Diff = c("NA", "NA", "5", "6.89", "9", "-4", "3.56"), 
                   County = c("Halland", "Gotland", "Skane", "Jonkoping", "Gotaland",
                              "Blekinge", "Dalarna"))

ggplot(data) +
  geom_sf(aes(fill = Diff), color = "black") +
  scale_fill_manual(values = c("blue", "yellow", viridis::viridis(4))) +
  coord_sf(datum = NA) 

所以我想绘制整个地图,如果一个县有 NA,该县应该是白色的。然后我想为每个县的值(从负值到正值)设置不同的颜色渐变。

大家有遇到过同样的问题吗?

下面的代码适合我

library(sf)
library(tidyverse)

#Downloading data from DIVA GIS website
get_sweden_map <- function(cong=113) {
  tmp_file <- tempfile()
  tmp_dir  <- tempdir()
  zp <- sprintf("http://biogeo.ucdavis.edu/data/diva/adm/SWE_adm.zip",cong)
  download.file(zp, tmp_file)
  unzip(zipfile = tmp_file, exdir = tmp_dir)
  fpath <- paste(tmp_dir)
  st_read(fpath, layer = "SWE_adm1")
}

swe <- get_sweden_map(114)

#Plot the Counties
plot(swe[5])

data <- tibble(Diff = c("NA", "NA", "5", "6.89", "9", "-4", "3.56"), 
                   County = c("Halland", "Gotland", "Skane", "Jonkoping", "Gotaland",
                              "Blekinge", "Dalarna"))

#Join the data to the swe shapefile
sweden <- swe %>% left_join(data, by=c("NAME_1"="County"))

#Plotting the data
ggplot(sweden) +
  geom_sf(aes(fill = Diff), color = "black") +
  scale_fill_manual(values = c("blue", "yellow", viridis::viridis(4))) +
  coord_sf(datum = NA)