Как нанести точки вхождения (lon/lat) на карту хороплета?
Я использую choroplethr для создания карты климата для западной части США (штат и округ). Карта закончена и выглядит потрясающе. Теперь мне нужно нанести точки вхождения (lon/lat) на карту. Я перепробовал много функций (lat/lon и lon/lat, обе). К сожалению, я не нашел решения до сих пор. Как это можно сделать?
PS (18 марта 2018 г.): я попытался (например) следующее утверждение, чтобы построить точки возникновения, казалось бы, принято, без ошибок, но и без реакции: NAM_prt = NAM_prt + geom_point(data=spec_US_df, aes(x = lon, y = lat), color="red", size=30, alpha=0.5)
library(choroplethr)
# Preparing the input data.frame containing "region" and "value"
state = c('ARI')
county = c('Apache', 'Cochise', 'Coconino', 'Gila', 'Graham', 'Greenlee', 'La Paz', 'Maricopa', 'Mohave', 'Navajo', 'Pima', 'Pinal', 'Santa Cruz', 'Yavapai', 'Yuma')
region = c(4001, 4003, 4005, 4007, 4009, 4011, 4012, 4013, 4015, 4017, 4019, 4021, 4023, 4025, 4027)
value = c(40, 88, 19, 10, 10, 0, 0, 302, 47, 0,222, 9, 0, 34, 40)
SWNAMcounties = data.frame(state = state, county = county, region = region, value = value)
# Preparing the choropleth map
NAM_prt = county_choropleth(SWNAMcounties,
title = "County Climate Map (Data from 1990 to 1995)",
legend = "Impact",
num_colors = 1,
state_zoom = c("arizona"))
NAM_prt
# part 2:
# Creating occurrence points (lat/lon)
lat = c('32.22528', '32.36194', '32.66156', '32.38121', '32.69486', '32.36842', '32.51652')
lon = c('-111.1206', '-109.6742', '-110.1742', '-109.6278', '-109.4554', '-109.5601', '-110.0397')
spec_US_df = data.frame(lat, lon)
сильный текст
1 ответ
В хороплетах все <region>_choropleth
функции возвращают объекты ggplot2. Это означает, что вы можете добавить еще один слой (например, точки, в вашем случае) с +
оператор.
Во-первых, я вижу проблему с тем, как вы определяете spec_US_df
, А именно, значения широты и долготы должны быть числовыми, но вы сделали их строками. Итак, сначала я сначала переписал ваш код создания данных, как это
# part 2:
# Creating occurrence points (lat/lon)
lat = c(32.22528, 32.36194, 32.66156, 32.38121, 32.69486, 32.36842, 32.51652)
lon = c(-111.1206, -109.6742, -110.1742, -109.6278, -109.4554, -109.5601, -110.0397)
spec_US_df = data.frame(lat, lon)
Далее, это помогает на самом деле создать нужный слой, прежде чем объединять его с choroplethr. Вот что у меня есть:
library(ggplot2)
ggplot(spec_US_df) +
geom_point(mapping = aes(lon, lat), color="red", size = 30, alpha=0.5)
Наконец, объедините два:
NAM_prt +
geom_point(data = spec_US_df, mapping = aes(lon, lat), color="red", size = 30, alpha=0.5, inherit.aes = FALSE)
Ключевое отличие состоит в том, что при объединении исходного кода ggplot2 с choroplethr вам также необходимо добавить параметр inherit.aes = FALSE
, Это потому, что у choroplethr есть эстетический параметр, который вам не нужен (он группирует полигоны по штатам и округам, что не имеет отношения к вашему графику рассеяния).