Я не совсем уверен, что вы пытаетесь сделать. Но, увидев, что вы делали, мне кажется, что вы хотите нарисовать все полигоны в области D C и назначить цвета для некоторых полигонов. Если так, то следующий способ для вас. Я пытался придерживаться пакетов, которые вы использовали, за исключением пакета tmap.
library(tigris)
library(USAboundaries)
library(sf)
library(dplyr)
library(ggplot2)
# Get DC polygon
dc <- USAboundaries::us_states() %>%
filter(statefp == "11") %>%
st_transform(crs = 4326)
Видя эту веб-страницу , вам, вероятно, нужно указать starts_with = "20"
, чтобы включить все полигоны в D C площадь. Но этого недостаточно. Таким образом, вам нужно подмножество данных.
zip <- tigris::zctas(starts_with = "20", class = "sf")
zip2 <- mutate(zip, ZCTA5CE10 = as.numeric(ZCTA5CE10)) %>%
filter(ZCTA5CE10 <= 20600) %>%
st_transform(zip, crs = 4326)
# Get polygons in the DC area
dc_zip <- st_intersection(zip2, dc)
Давайте нарисуем область D C один раз
ggplot() + geom_sf(data = dc_zip)
![enter image description here](https://i.stack.imgur.com/fkbEZ.png)
Давайте скажем, у вас есть непрерывная переменная. Значения присутствуют для 20000-20010 (ZCTA5CE10), но все другие ZCTA5CE10 имеют NA. Я создаю эту фиктивную переменную здесь. В ваших реальных данных, я думаю, что это переменная, которую вы должны указать самостоятельно.
set.seed(111)
dc_zip <- mutate(dc_zip, whatever = if_else(ZCTA5CE10 %in% 20000:20010,
sample.int(1000, size = n(), replace = FALSE),
NA_integer_))
Снова нарисуйте карту. Я использую whatever
в качестве переменной для заполнения полигонов.
ggplot() + geom_sf(data = dc_zip, aes(fill = whatever))
![enter image description here](https://i.stack.imgur.com/xlxjo.png)
Если вы хотите изменить цвет для областей NA, вы можете например, добавьте scale_fill_continuous(na.value = "white")
.