【问题标题】:Inconsistent behaviour of ggplot when adding points to sf maps向 sf 地图添加点时 ggplot 的行为不一致
【发布时间】:2021-02-19 13:50:40
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 出于兴趣,如果您删除第二次调用中的减号会怎样?还是只是 x 值上的减号?
  • @AllanCameron - 刚刚试了一下,很遗憾,没用
  • 两者的crs有区别吗?
  • @at80,我刚刚检查过了。第一个shapefile(有效的)有一个投影的CRS:NA;第二个不起作用,具有预计的 CRS:WGS 84 / UTM zone 19S。您认为这种差异可能是导致问题的根源吗?
  • 我很确定点单元需要匹配 crs。如果您转换为 epsg 4326,那么它可能会解决问题。我相信有一个 ggplot 函数可以为您处理。

标签: r ggplot2 shapefile sf geom-point


【解决方案1】:

不一致的行为是由于每个 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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-24
    • 2016-03-04
    • 2013-06-13
    • 2017-12-22
    • 2022-09-27
    • 1970-01-01
    • 2014-02-19
    • 2021-11-23
    相关资源
    最近更新 更多