【问题标题】:Overlaying data on to a map using ggplot使用 ggplot 将数据叠加到地图上
【发布时间】:2020-07-27 13:29:22
【问题描述】:

所以,我使用 ggplot 创建了一张连续的美国地图,然后根据它们的经/纬度位置制作了美国境内特定数据点的单独图表(/地图),我想知道如何覆盖这些地图上的特定数据点。代码如下:

america_map <- map_data("world", region='USA')
USA_map <-
  ggplot(america_map, aes(x=long, y=lat, group=group)) +
  geom_polygon() + 
  scale_x_continuous(limits = c(-125,-65)) +
  scale_y_continuous(limits = c(25, 50)) + 
  coord_map() +
USA_map

Ravg_map <-
  ggplot(longlat_LH, aes(x=longitude, y=latitude))+
  geom_point(aes(color=Ravg))
Ravg_map

longlat_LH df 如下所示供参考:

> head(longlat_LH)
 X latitude longitude site_id Ravg
 1    38.42   -108.38     409 40.8
 2    40.17   -107.06     426 40.3
 3    37.79   -108.02     465 37.0
 4    39.06   -108.06     622 43.6
 5    37.75   -107.69     632 41.3
 9    37.65   -108.01     739 39.7

【问题讨论】:

  • USA_map + geom_point(data = longlat_LH, aes(x=longitude, y=latitude, color = Ravg))

标签: r ggplot2


【解决方案1】:

将您的几何图形直接添加到USA_map,但将data= 参数设置为longlat_LH。下面是一个使用ggrepel 包来分隔彼此靠近的标签并避免重叠的示例:

library(ggrepel)

USA_map +
  geom_point(data=longlat_LH,
    mapping=aes(x=longitude, y=latitude, group=NULL),
    color='white'
  ) +
  geom_text_repel(data=longlat_LH,
    mapping=aes(x=longitude, y=latitude, group=1, label=site_id),
    color='white'
  )

【讨论】:

  • 感谢您的回复,这非常有效,因为我进一步编辑了我的图表,直到我添加了 'group=NULL' 参数,它才起作用,你能解释一下这个组术语是什么吗?我对这一切都很陌生,你可能会说
  • 集体美学是ggplot用来展示你的geom的。因此,对于地图,有一个group 值与构成该多边形的点相关联。就该国而言,它将是该边界上的所有点。如果您设置绘制州,则它是每个州外部的所有点......像密歇根州这样的州包含多个多边形。在longlat_LH 中,它没有“组”列,因此您会收到错误消息(因为ggplot 尝试应用与地图相同的美学)。将其设置为 NULL 仅意味着您不需要组。
  • 您也可以将其设置为 group=1 或类似的东西 - 如果您设置 group= 任何不是数据集中列的数字或字符,它只是表示所有观察都属于同一组。这对于点和标签/文本几何并不重要。
猜你喜欢
  • 2012-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-21
  • 2015-11-08
  • 2021-07-16
  • 1970-01-01
  • 2011-06-26
相关资源
最近更新 更多