向 ggmap 添加易于阅读的比例尺(使用 ggsn 包?)

Add easily readable scale bar to ggmap (using ggsn package?)

我正在努力在我的一些地图中插入比例尺。我使用 ggmaps,目前正在使用 ggsn 包插入比例尺。然而,这个比例尺在我正在使用的地图类型上非常难以阅读(见下图)。我想 (a) 找到一种方法使其更易于阅读,(b) 将比例尺置于地图边界之外,或者 (c) 使用不同的包以更轻松地进行自定义。

基本上,我的代码看起来像这样。这个例子应该很容易重现。

map <- get_map(location = c(146, 15), zoom = 8,
               maptype = “satellite”, source = "google") 

Map <- ggmap(map)

Map + ggsn::scalebar(x.min = 144.5, x.max = 147.5,
           y.min = 13.5, y.max = 16.5, 
           dist = 50, dd2km = TRUE, model = 'WGS84')

并生成如下图,其中右下角的比例尺很难看清。

有什么想法吗?非常感谢!

Github scalebar 的开发版本有新参数 st.colorbox.fill,可以更好地自定义栏。

安装该版本使用:

devtools::install_github('oswaldosantos/ggsn')

然后使用例如:

ggmap(Map) + 
  my_scalebar(x.min = 144.5, x.max = 147.5,
            y.min = 13.5,  y.max = 16.5,
            dist = 50, dd2km = TRUE, model = 'WGS84',
            box.fill = c("yellow", "white), st.color = "white")

旧答案

在发现新版本之前,我写了这个关于如何修改函数的答案。

我认为这里最好的方法是修改 scalebar 函数。

首先,您需要加载ggsn包并编辑函数:

library(ggsn)
my_scalebar <- edit(scalebar)

这应该会弹出一个编辑器。修改函数的顶部,使其看起来像这样:

function (data = NULL, location = "bottomright", dist, height = 0.02, 
  st.dist = 0.02, st.bottom = TRUE, st.size = 5, dd2km = NULL, 
  model, x.min, x.max, y.min, y.max, anchor = NULL, facet.var = NULL, 
  facet.lev = NULL, box2_fill = "yellow", legend_color = "white")
{
  require(maptools)

我们添加了 3 件事:

  • 一个参数 box2_fill,默认值 = "yellow"
  • 一个参数 legend_color,默认值 = "white"
  • 需要 maptools 因为该函数使用该包中的 gcDestination()

接下来,查找以 gg.box2 开头的行并将其更改为使用 box2_fill:

的值
  gg.box2 <- geom_polygon(data = box2, aes(x, y), fill = box2_fill, 
    color = "black")

然后,编辑函数底部附近的部分以使用 legend_color 的值:

else {
    gg.legend <- annotate("text", label = paste0(legend[, 
      "text"], "km"), x = x.st.pos, y = st.dist, size = st.size,
      color = legend_color)
  }

保存将关闭编辑器并将新函数 my_scalebar 保存到您的工作 space。

现在您可以使用新功能了。您可以为新参数 box2_fill =legend_color = 提供值,或者只尝试默认值:

ggmap(Map) + 
  my_scalebar(x.min = 144.5, x.max = 147.5,
            y.min = 13.5,  y.max = 16.5,
            dist = 50, dd2km = TRUE, model = 'WGS84')

如果您认为您的编辑有用,您可以使用拉取请求 at Github 将它们建议给包开发人员。注意:看起来开发人员已经开始解决这个问题,因为 scalebar 的 Github 版本有新的 box.fillst.color 参数。