【问题标题】:Geom_points not being drawn on ggplot mapGeom_points 未在 ggplot 地图上绘制
【发布时间】:2021-10-09 00:48:20
【问题描述】:

我正在尝试在从 shapefile(在此link 下载)创建的地图上叠加几个点。我正在使用 sf 包来绘制我的地图,并且能够得到以下地图。

first.map<-ggplot()+ 
  geom_sf(data = shp)+
  ggtitle("First Map")


如您所见,这很好用,但是当我尝试叠加我的点时,我得到以下结果。

second.map<-ggplot()+ 
  geom_sf(data = shp)+
  geom_point(data=locations, aes(long,lat),inherit.aes = F)+
  ggtitle("Second Map")


我认为这与 sf 如何解释我的点的坐标有关,但我不知道如何将我的点坐标变成 R 想要的坐标。下面是我试图覆盖的坐标。我在处理此类数据方面不是很有经验,因此我们将不胜感激。

locations<-data.frame(id=c(1,2,3,4,5),
                      long=c(96.73872,96.69264,96.69264,96.69250,96.68029),
                      lat=c(43.52769,43.53598,43.53598,43.54669,43.53585))

【问题讨论】:

  • 查看st_crs(shp)st_coordinates(shp)。您的 CRS 以美国英尺为单位,并且似乎与您的位置数据具有非常不同的规模。我通常会尝试将我所有的空间数据变成 sf 对象(或一个都没有)以避免这种情况。尝试从点中制作一个 sf 并投影到与地区相同的 CRS
  • 修改我的评论,您的经度分量应该是负数。这使得这个边界成为一个错字

标签: r ggplot2 gis spatial sf


【解决方案1】:

这不是我的强项,所以我也很想玩。

我让它像这样工作,

  • 将位置转换为 sf 对象
  • 将形状转换为具有相同的 crs
  • 通过在输入数据中添加*-1 来编辑位置经度以从西向东交换

渴望从其他人那里听到更好的做法,但这应该会让你继续前进。

shp <- st_read("Subdivisions/Subdivisions.shp")

locations<-data.frame(id=c(1,2,3,4,5),
        long=c(96.73872,96.69264,96.69264,96.69250,96.68029)*-1,
        lat=c(43.52769,43.53598,43.53598,43.54669,43.53585))


locations_g <- st_as_sf(locations, coords = c("long", "lat"), crs = 4326)
shp2 <- st_transform(shp, 4326)

ggplot()+ 
  geom_sf(data = shp2)+
  geom_sf(data=locations_g)+
  ggtitle("Second Map")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-14
    • 2018-02-28
    • 2023-01-24
    • 2013-05-23
    • 1970-01-01
    • 2018-04-07
    • 2018-11-11
    • 1970-01-01
    相关资源
    最近更新 更多