Внесение ценностей на карту округа в R

Я использую таблицу Excel для данных. В одном столбце указаны номера FIPS для округов GA, а в другом - "Количество" с номерами от 1 до 5. Я сделал карту с этими значениями, используя следующий код:

library(usmap)  
library(ggplot2)  
library(rio)  
carrierdata <- import("GA Info.xlsx")  
plot_usmap( data = carrierdata, values = "Count", "counties", include = c("GA"), color="black") +  
    labs(title="Georgia")+  
    scale_fill_continuous(low = "#56B1F7", high = "#132B43", name="Count", label=scales::comma)+  
    theme(plot.background=element_rect(), legend.position="right")  

Я включил изображение полученной карты и образец данных, которые я использую. Может ли кто-нибудь помочь мне поставить фактические цифры подсчета для каждого округа?
Спасибо!
ДанныеКарта GA

1 ответ

Решение

В usmapПакет является хорошим источником для карт округов, но содержащиеся в нем данные представлены в формате фреймов данных с координатами x, y контуров округов, тогда как вам нужны числа, нанесенные в центре округов. В пакете нет координат центров для каждого округа.

Хотя это немного неудобно, стоит преобразовать карту в формальную sfформат фрейма данных, чтобы обеспечить лучшие возможности построения графиков, включая вычисление центроида для каждого округа. Сначала загрузим необходимые пакеты, получим данные о Грузии и преобразуем их вsf формат:

library(usmap)
library(sf)
library(ggplot2)
 
d   <- us_map("counties")
d   <- d[d$abbr == "GA",]
GAc <- lapply(split(d, d$county), function(x) st_polygon(list(cbind(x$x, x$y))))
GA  <- st_sfc(GAc, crs = usmap_crs()@projargs)
GA  <- st_sf(data.frame(fips = unique(d$fips), county = names(GAc), geometry = GA))

Очевидно, у меня нет ваших числовых данных, поэтому мне придется придумать их, эквивалентные данным, которые вы импортируете из Excel. Я возьму на себя твою собственнуюcarrierdata имеет столбец с именем "fips" и другой столбец с именем "values":

set.seed(69)
carrierdata <- data.frame(fips = GA$fips, values = sample(5, nrow(GA), TRUE))

Итак, теперь мы left_join наши импортированные данные в GA данные округа:

GA <- dplyr::left_join(GA, carrierdata, by = "fips")

И мы можем вычислить центральную точку для каждого округа:

GA$centroids <- st_centroid(GA$geometry)

Теперь осталось только построить результат:

ggplot(GA) + 
  geom_sf(aes(fill = values)) + 
  geom_sf_text(aes(label = values, geometry = centroids), colour = "white")

Другие вопросы по тегам