首页 > 解决方案 > 在ggspatial图中使用轴标签和网格线的投影坐标?

问题描述

我正在使用 ggspatial 在 UTM 投影中绘制地图。地图以正确的投影绘制,但轴标签仍然是经纬度。我想在轴上显示 UTM 坐标。

所需输出: 德国地图,在 x 和 y 轴上显示以公里为单位的 UTM 坐标

示例代码:

require(tidyverse); require(magrittr); require(raster); require(rworldmap); require(ggspatial)

targetcrs = "+proj=utm +datum=WGS84 +no_defs +zone=32 +units=km"
countriesLow %>% subset(ADMIN == 'Germany') %>% spTransform(targetcrs) -> de
de %>% extent %>% as('SpatialPolygons') -> bbox
crs(bbox) <- targetcrs

ggplot() + coord_sf(crs=targetcrs) + layer_spatial(de) + layer_spatial(bbox, fill=NA) -> p
print(p)

结果输出: UTM 投影中的德国地图,但网格线和轴标签以经纬度表示

您可以从边界框显示为具有直边的矩形这一事实轻松看出,空间对象被绘制在预期的投影中。

调用 ggplot 时,控制台会打印一条警告:

Coordinate system already present. Adding new coordinate system, which will replace the existing one.

但是,当我检查 ggplot 对象时,没有 crs 信息:

> p$coordinates$crs
NULL

上面的“所需输出”是用 spplot 生成的:

spplot(de[,1], sp.layout=list('sp.lines', bbox), scales=list(draw=T))

但是,还有其他原因不使用 graphics::plot、sp::spplot 或其他替代方法,除非确实无法使用 ggspatial 解决这个看似简单的问题。

我曾尝试阅读 ggspatial 文档,该文档说绘图 CRS 由 coord_sf 设置或默认为第一层空间的 CRS,但这不是正在发生的事情。我曾尝试过玩耍并在谷歌上搜索解决方案,但不知所措。

一种可能的方法是为 x 和 y 创建自定义比例,使用自定义标签和中断,或者取消网格线或使用 annotation_spatial_hline() 和 vline 创建它们。但是我希望有一个简单的解决方法。

标签: rgeospatialaxisgridlinesggspatial

解决方案


推荐阅读