在 r 中的 ggplot 中的地图中心添加点

Add point at map centre in ggplot in r

我想在每个州中心加分。

我知道 geosphere 包中的 centroid() 可以做到这一点。它只能计算一个经纬度,但我有49个州,我不想一一计算。

我也知道 sp 包中的 coordinates() 可以做到这一点。它需要参数 class 输入是 SpatialPolygonsDataFramesp 但是我从 map_data() 得到的 us 地图是一个数据框。

有什么建议吗?

library(scatterpie)
library(tidyverse)
library(geosphere)
library(ggnewscale)
us <- map_data('state') %>% as_tibble()

n = length(unique(us$region))

# creat fake mapping data

temperature_data <- tibble(region = unique(us$region),
                           temp = rnorm(n = n))

coords <- us %>% select(long, lat, region) %>% distinct(region, .keep_all = T)


coords_data <- tibble(region = unique(us$region)) %>% left_join(coords)
                       


us <- left_join(us, temperature_data)

# add point
p + geom_map(map = us, aes(map_id = region, fill = temp), color = 'grey') +
    geom_point(data = category_data, aes(long, lat))

您可以通过按 region 对数据进行分组来计算质心,然后使用 purrr::group_modify() 对每个组进行修改:

centroids <- us %>% 
  group_by(region) %>% 
  group_modify(~ data.frame(centroid(cbind(.x$long, .x$lat))))

然后将所有内容绘制在一起:

ggplot(us, aes(x = long, y = lat)) + 
  geom_polygon(aes(group = group)) +
  geom_map(map = us, aes(map_id = region, fill = temp), color = 'grey') +
  geom_point(data = centroids, aes(lon, lat), col = "red")