使用 R 在 MULTIPOLYGON sf data.frame 上绘制 SpatialPoints (LAT/LON)

Plot SpatialPoints (LAT/LON) on MULTIPOLYGON sf data.frame using R

我想在多边形地图上绘制点(来自 naturalearthdata.com 的 shps)。理想情况下使用 LAT-LON 坐标。然而,我的点没有显示,在放大地图(分别修改 extent() )后在某处结束或滑出情节

我尝试栅格化 world_wgs84 地图,然后使用 points() 函数绘制坐标。这有效,但我没有选择绘制边界,稍后更改国家/地区颜色填充。所以我正在寻找一种方法将两个对象绘制到彼此上,同时保留 MULTIPOLYGONE data.frame.

的完整信息
require(sf)

#set path
path_<-"R/Shapefile Natural Earth Data/ne_50m_admin_0_countries/"
shp_<-"ne_50m_admin_0_countries.shp"

#import
world_wgs84 <- st_read(paste0(path_,shp_))

plot(world_wgs84[,8])


# point coordinates
city_<-data.frame("LON"=0, "LAT"=0)
coordinates(city_)<-~LON+LAT
crs(city_)<-crs(world_wgs84)


# plotting
plot(world_wgs84[,4], col=1)
points(city_, col="red", pch=20, cex=2)

这只给我地图,没有分数。 (点应该出现在赤道周围,与格林威治处于同一纬度)

这就是我的 world_wgs84 sf 对象的样子:

> world_wgs84
Simple feature collection with 242 features and 161 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -180 ymin: -89.99893 xmax: 180 ymax: 83.59961
Geodetic CRS:  WGS 84

这些是我的空间点:

> city_
class       : SpatialPoints 
features    : 1 
extent      : 10, 10, 53, 53  (xmin, xmax, ymin, ymax)
crs         : +proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m +no_defs

有什么想法可以让它们互相反对吗?

这是在自然地球形状上使用 lon/lat 坐标绘制点的方法:

library(rnaturalearth)
library(tidyverse)

points <- tibble(
  x = c(-100, -90), # lon
  y = c(0, 0), # lat
  value = c("A", "B")
)

world <- ne_countries(scale = "medium", returnclass = "sf")

world %>%
  ggplot() +
  geom_sf(aes(fill = continent)) +
  geom_point(data = points, mapping = aes(x, y, color = value))

reprex package (v2.0.0)

于 2022-02-18 创建

This gives me just the map, no points. (Point should appear around the equator, at the same latitude as Greenwich)

他们是,但是出于某种原因情节不关心坐标。 plot() 最简单的解决方案是创建一个具有定义区域的空地块,然后将其他对象添加到该地块。我确实更喜欢 plot() 而不是 ggplot() 因为简单。

library(sf)
library(sp)

world_wgs84 <- st_read("/home/sapi/projekty/test/ne/ne_50m_admin_0_countries.shp")

让我们创建一个空图:

plot(x = 0, y = 0, cex = 0, 
     xlim = c(-180, 180), ylim = c(-90,90), 
     axes = TRUE, xlab = "", ylab = "")

并添加我们的对象 add = TRUE:

plot(world_wgs84[,8], add = TRUE)

city_<-data.frame("LON"=0, "LAT"=0)
coordinates(city_) <- c("LON", "LAT")
plot(city_, add = TRUE, pch = 20, cex = 2, col = "red")

reprex package (v2.0.1)

于 2022-02-20 创建