r - 在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 创建它们。但是我希望有一个简单的解决方法。
解决方案
推荐阅读
- excel - 搜索字符串,如果找到则粘贴值 - 然后循环
- ruby-on-rails - 如何修复 Rails 单选按钮集合总是返回最后一个值?
- php - Display last WooCommerce admin order note in customers order history
- qt - QSystemTrayIcon 不可用,然后在 Ubuntu 18.04 LTS 上使用 sudo 运行应用程序
- javascript - onChange?: (ValueType, ActionMeta) => void,与 OptionType 不兼容
- scenekit - 更新场景视图的 pointOfView 位置属性后的 SceneKit `projectPoint` 问题
- ios - idleTimerDisabled 不适用于(自治)单应用程序模式
- azure - 如何在 Azure devops 中为多个管道(在多个项目中)使用管道模板
- php - 如何增加 Wordpress 中特定用户角色的最大上传文件大小?
- reactjs - 如何编写 package.json 以将 Electron 与 TypeScript、React 一起使用