使用geom_sf()绘制带有lat-long以外的任何投影的sf对象

ze *_*uel 3 r axes ggplot2 map-projections r-sf

我正在尝试在除经纬度以外的任何投影中使用geom_sf()绘制多边形。

我使用在手册页中找到的示例geom_sf() 导入数据集:

nc <- sf::st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)
Run Code Online (Sandbox Code Playgroud)

从latlong转换为epsg:3857

nc_3857 <- sf::st_transform(nc, "+init=epsg:3857")
Run Code Online (Sandbox Code Playgroud)

最后使用ggplot2进行绘图,以定义绘图的crs:

ggplot() +
 geom_sf(data = nc_3857, colour = "red", fill = NA) +
 coord_sf(crs=st_crs(3857))
Run Code Online (Sandbox Code Playgroud)

我在纬向长轴的wgs84(即epsg:4326)中不断获取地图。我想要以米为单位的轴,因此需要ggplot绘制投影的多边形。我究竟做错了什么?

预先感谢zé

Edz*_*sma 6

另请参阅https://github.com/tidyverse/ggplot2/issues/2200并尝试

ggplot() +  geom_sf(data = nc_3857, colour = "red", fill = NA) +
   coord_sf(datum=st_crs(3857))
Run Code Online (Sandbox Code Playgroud)

这使

在此处输入图片说明


Spa*_*man 2

它正在将其绘制在所请求的投影中,它只是覆盖了经纬度网格。

例如,如果您在挪威尝试类似的操作,靠近北极,您可以看到显示的 XY 坐标是变换的坐标,但叠加的经纬网是经纬度的。这是挪威地图,坐标为 epsg 3035(圆锥形):

在此输入图像描述

所以它正在绘制投影多边形。如果这里的经纬线是一个网格,那么它将在经纬投影中绘制坐标。

文档中唯一提到的经纬网是一个参数coord_sf

datum: CRS that provides datum to use when generating graticules
Run Code Online (Sandbox Code Playgroud)

这其实没什么可说的。

你只想要一个笛卡尔坐标系?哦,让我们尝试一下:

> ggplot() +  geom_sf(data = rp, colour = "red", fill = NA) + coord_cartesian()
Error: geom_sf() must be used with coord_sf()
Run Code Online (Sandbox Code Playgroud)

使用 geom_sf 检查 ggplot2 问题是否有替代经纬网,如果那里没有任何内容,则添加一个问题。