r - 添加投影时,向 geom_sf 形状添加点不起作用
问题描述
当我尝试将点图层添加到geom_sf()
图层和投影时,这些点似乎最终位于德克萨斯州南部的一个位置。以下是重现此问题的最小示例。
library(sf)
library(ggplot2)
# devtools::install_github("hrbrmstr/albersusa")
library(albersusa)
crs_use = "+proj=laea +lat_0=30 +lon_0=-95"
d_points = data.frame(long = c(-110, -103, -84),
lat = c(45, 40, 41))
A = ggplot(data = usa_sf()) +
geom_sf() +
geom_point(data = d_points,
aes(x = long, y = lat),
color = "red", size = 5) +
theme_minimal() +
ggtitle("(A) right point position, wrong projection")
B = ggplot(data = usa_sf()) +
geom_sf() +
geom_point(data = d_points,
aes(x = long, y = lat),
color = "red", size = 5) +
coord_sf(crs = crs_use) +
theme_minimal() +
ggtitle("(B) right projection, wrong points using geom_point()")
C = ggplot() +
geom_sf(data = usa_sf()) +
geom_sf(data = st_as_sf(d_points,
coords = c("long", "lat"), crs = crs_use),
color = "red", size = 5) +
coord_sf(crs = crs_use) +
theme_minimal() +
ggtitle("(C) right projection, wrong points using geom_sf() points")
cowplot::plot_grid(A, B, C, nrow = 3)
我想使用自定义投影向美国地图添加一个点图层。但是,每当我使用投影时,我指定的点就会变成德克萨斯州东南部的一个奇怪位置,它不在我指定的位置。
任何有关解决此问题的建议表示赞赏。谢谢!
解决方案
您还需要重新规划您的观点;sf::st_transform()
应该做的工作。
我无法访问 {albersusa} 包,所以我使用 {USABoundaries} 来获取较低 48 的地图,但这不是重点;st_transform(crs = crs_use)
在绘图之前,该点适用于您的两个空间对象。
library(sf)
library(ggplot2)
library(USAboundaries)
crs_use <- "+proj=laea +lat_0=30 +lon_0=-95"
usa_sf <- us_boundaries(type="state", resolution = "low") %>%
dplyr::filter(!state_abbr %in% c("PR", "AK", "HI")) %>%
st_transform(crs = crs_use)
d_points <- data.frame(long = c(-110, -103, -84),
lat = c(45, 40, 41)) %>%
st_as_sf(coords = c("long", "lat"), crs = 4326) %>%
st_transform(crs = crs_use)
ggplot(data = usa_sf) +
geom_sf() +
geom_sf(data = d_points,
color = "red", size = 5) +
theme_minimal()
推荐阅读
- autodesk-forge - 为点云添加伪造查看器测量工具
- javascript - 如何使用 javascript 获取动画网格
- html - Bootstrap Video Carousel 播放按钮/左右指示器未出现
- php - Yii2 不是从项目文件夹调用控制台命令
- metal - 在金属中画圆/半圆
- ios - Scrollview 在其中添加新组件时不会调整大小
- c# - 捕获控制选项卡生成的事件
- sql - postgresql - 累积。按月汇总活跃客户(去除流失)
- vbscript - 在 VBScript 和 XMLHTTP 中使用特殊字符
- pyspark - PySpark - 迭代数据框的行