Как нанести точки появления (долгота / широта) на картограмму?

Я использую choroplethr для создания климатической карты для западной половины США (штата и округа). Карта закончена и выглядит потрясающе. Теперь мне нужно нанести на карту точки появления (долгота / широта). Я пробовал много функций (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)

сильный текст


person Petra    schedule 17.03.2018    source источник


Ответы (1)


В choroplethr все <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 имеет эстетический параметр, который вам не нужен (он группирует полигоны по штатам и округам, что не имеет отношения к вашей диаграмме рассеивания).

Окончательное изображение

person Ari    schedule 18.03.2018
comment
Большое спасибо, Ари. Приносим извинения за ошибку, я должен был заметить, что я поместил значения долготы и широты в виде строк. С уважением, Петра - person Petra; 18.03.2018
comment
Большой! Если он отвечает на ваш вопрос, можете ли вы проголосовать за него и принять его? - person Ari; 19.03.2018