0

使用ggplot我想向sf地图添加点。拿这个代码:

ggplot(data = shapefile) +
  geom_sf()+
  geom_point(x = -70.67,y =-33.45, size = 10, colour = "red")

此代码适用于我的一个 shapefile,但不适用于另一个,我不知道为什么。这是我的第一个 shapefile 的代码输出:

在此处输入图像描述

这是第二个 shapefile 的代码输出:

在此处输入图像描述

第二次调用无法识别坐标的潜在原因?我在这两个图之间看到的唯一区别是,在第一个图中,经度和纬度被数字注释,而在第二个图中,在它们的北/南和东/西方向之后。

4

1 回答 1

2

不一致的行为是由于每个 shapefile 的投影不同。您通常需要提供与您正在使用的投影单位相匹配的点位置。您可以将点转换为 shapefile 的投影,或者,如果您不关心数据是否在地理坐标系中,您可以转换为 4326,即 WGS84 基准上的纬度/经度。

方法 1:维护 shapefile 的投影。此方法会将您的点转换为空间sf数据类型,因此您可以使用geom_sf.

pts <- st_point(c(-70.67, -33.45)) %>% st_sfc() %>% st_as_sf(crs=st_crs(4326))

ggplot(data = shapefile) +
  geom_sf() +
  geom_sf(data = pts, size = 10, colour = "red")

方法 2:将 shapefile 转换为 EPSG 4326。

ggplot(data = shapefile %>% st_transform(st_crs(4326))) +
  geom_sf() +
  geom_point(x = -70.67,y =-33.45, size = 10, colour = "red")
于 2020-11-06T23:33:28.327 回答