【问题标题】:Adding points to geom_sf shapes does not work when adding a projection添加投影时,向 geom_sf 形状添加点不起作用
【发布时间】:2020-02-13 04:48:10
【问题描述】:

当我尝试将点图层添加到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)

我想使用自定义投影向美国地图添加点图层。但是,每当我使用投影时,我指定的点就会变成德克萨斯州东南部的一个奇怪位置,而不是我指定的位置。

感谢任何有关解决此问题的建议。谢谢!

【问题讨论】:

标签: r ggplot2 data-visualization geospatial sf


【解决方案1】:

你也需要重新规划你的观点; 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()

【讨论】:

  • 谢谢!它有效,但我认为st_as_sf(coords = c("long", "lat"), crs = 4326) 中的crs = 4326 已经指定了投影,但事实证明它没有。那么crs = 4326 在这里做什么呢?我也试过st_as_sf(coords = c("long", "lat"), crs = crs_use),还是不行。
  • st_as_sf()中的crs的意思是“你刚才给我的坐标是用什么坐标系的?” st_transform() 中的 crs 表示“我应该将这些坐标转换成什么坐标系?”类比:如果你在翻译一本书,st_as_sf() 中的 crs 是“这本书是用什么语言写的?”在st_transform() 中是“我将其翻译成什么语言?”
  • @EugeneChong 谢谢你的解释!
猜你喜欢
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
  • 1970-01-01
  • 2012-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
相关资源
最近更新 更多