首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在r中的ggplot中添加在地图中心的点

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

Stack Overflow用户
提问于 2020-10-10 01:01:09
回答 1查看 433关注 0票数 1

我想在每个州中心加分。

我知道来自geosphere包的geosphere可以做到这一点。它只能计算一个经度和纬度,但我有49个州,我不想一个一个地计算它。

我还知道来自sp包的sp可以做到这一点。它需要参数类输入是SpatialPolygonsDataFramesp,但是我从map_data()获得的us映射是一个数据。

有什么建议吗?

代码语言:javascript
复制
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))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-10 11:22:38

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

代码语言:javascript
复制
centroids <- us %>% 
  group_by(region) %>% 
  group_modify(~ data.frame(centroid(cbind(.x$long, .x$lat))))

然后把所有的东西都画在一起:

代码语言:javascript
复制
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")

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64288986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档