向使用 ggRGB 制作的地图添加比例尺

问题描述

我使用 RStoolBox 包中的 ggRGB() 制作了卫星图像的 RGB 合成图像。我想为图像添加一个比例尺,但我不知道如何做到这一点。在 R 中使用 scalebar() 时,我通常会使用 ggsn 包中的 ggmaps(),但看起来它不能处理 RasterBrick 对象,就像 ggRGB() 需要的输入一样。

这是一个例子:

library(raster)
library(ggplot2)
library(RStoolBox)

data(lsat)

ggRGB(img = lsat,r = 3,g = 2,b = 1,stretch = 'hist') +
  blank() # eliminate x and y axes

这会产生以下图像:

RGB composite of satellite data

我想在右上角添加一个比例尺。这是我尝试过的:

ggRGB(img = lsat,stretch = 'hist') +
  blank() +
  ggsn::scalebar(lsat,dist = 2,dist_unit = "km",transform = TRUE,model = "wgs84",location = "upperright")

这将返回错误:“.local(x,...) 中的错误:图层名称无效”

任何帮助将不胜感激。如果可能,我想坚持使用 ggRGB(),但如果我可以在图像上放置比例尺,我会接受其他绘图方法

解决方法

您可以使用包 ggspatial

ggRGB(img = lsat,r = 3,g = 2,b = 1,stretch = 'hist') +
  theme_void() +
  ggspatial::annotation_scale(location = "tr",width_hint =0.5,pad_x = unit(0.7,"cm"))

enter image description here

如果您想对外观进行更精细的控制,此答案中还提供了一种稍微冗长但高度可定制的方法https://stackoverflow.com/a/39069955/2761575