Внесение ценностей на карту округа в 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")
Я включил изображение полученной карты и образец данных, которые я использую. Может ли кто-нибудь помочь мне поставить фактические цифры подсчета для каждого округа?
Спасибо!
Данные
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")