Карта Highcharter R из настроенного шейп-файла
У меня проблемы с импортом и соединением карты геоджона с некоторыми данными с использованием библиотеки highcharter. Я пытаюсь использовать уменьшенную версию набора данных sf, которую я получил, используя пакет tidycensus, который я затем загрузил на https://mapshaper.org/ чтобы уменьшить размер файла за счет уменьшения количества полигонов. После прореживания я экспортировал как геойсон и импортировал в R.
Вот пример. Сначала я загружаю данные, используя tidycensus, создаю два набора данных, один для геометрии и один для атрибута интереса, здесь его средний доход семьи. Затем я экспортирую данные геометрии в так, чтобы я мог подать в maphapper для сокращения.
#start with an example for one state
##pull geometry data for one state
md_data <- get_acs(geography = "tract",
state = "MD",
variables = "B19113_001",
geometry = T,
key = Sys.getenv("CENSUS_API_KEY"))
#data set of just GEOID and median family income for use in mapping
md_mfi <- as.data.frame(md_data) %>%
mutate(median_family_income = case_when(is.na(estimate) ~ 0,
TRUE ~ estimate)) %>%
select(GEOID,median_family_income)
#slim down to just the geoid and the geometry data
md_tracts <- md_data %>%
select(GEOID,geometry)
st_write(md_tracts, "U:/M1JPW00/GeoSpatial/census_tracts/acs_carto_2016/md_carto_tracts.shp")
После переформатирования в mapshaper я импортирую обратно в R
md_map_json <- jsonlite::fromJSON(txt = "FILEPATH/md_carto_tracts.json",simplifyVector = FALSE)
md_map_json <- geojsonio::as.json(md_map_json)
А затем попробуйте построить карту на основе примера из документации Highcharter здесь
> class(md_map_json)
[1] "json" "geo_json"
> head(md_mfi)
GEOID median_family_income
1 24001000100 54375
2 24001000200 57174
3 24001000300 48362
4 24001000400 52038
5 24001000500 46174
6 24001000600 49784
highchart(type = "map") %>%
hc_add_series(mapData = md_map_json,
data = list_parse(md_mfi),
joinBy = "GEOID",
value = "median_family_income",
name = "Median Family Income")
Карта на самом деле отображается, и участки переписи окрашены в сплошной синий цвет, но данные серии, похоже, не могут успешно объединиться даже с использованием list_parse или без него.
0 ответов
У меня была такая же проблема, и я спросил здесь: Сделайте хороплет из карты, не относящейся к коллекции Highmap. Никто не ответил (я знаю!), Поэтому я наконец нашел решение, которое, как мне кажется, должно работать и для вас:
#Work with the map you get until this step:
md_map_json <- jsonlite::fromJSON(txt = "FILEPATH/md_carto_tracts.json",simplifyVector = FALSE)
#This part is unnecessary:
#md_map_json <- geojsonio::as.json(md_map_json)
#Then, write your map like this:
highchart() %>%
hc_add_series_map(md_map_json, md_mfi, value = "median_family_income", joinBy = "GEOID")