使用 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 创建
我想在多边形地图上绘制点(来自 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 创建