R 将易读的比例尺添加到ggmap(使用ggsn包?)

R 将易读的比例尺添加到ggmap(使用ggsn包?),r,ggplot2,ggmap,R,Ggplot2,Ggmap,我正在将比例尺插入我的一些地图中。我使用ggmaps,目前正在使用ggsn包插入比例尺。然而,在我正在使用的地图类型上,这个比例尺是非常难以阅读的(参见下面的地图)。我想(a)找到一种更容易阅读的方法,(b)让比例尺在地图边界之外,或者(c)使用一个不同的软件包,以便于定制 本质上,我的代码是这样的。该示例应易于复制 map <- get_map(location = c(146, 15), zoom = 8, maptype = “satellite”, s

我正在将比例尺插入我的一些地图中。我使用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')

mapGithub的
scalebar
开发版本有新的参数,
st.color
box.fill
,可以更好地定制条形图

使用以下方法安装该版本:

devtools::install_github('oswaldosantos/ggsn')
然后使用例如:

旧答案

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

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

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

library(ggsn)
my_scalebar <- edit(scalebar)
我们增加了3件事:

  • 参数
    box2\u使用默认值=“黄色”填充
  • 默认值为“白色”的参数
    legend\u color
  • 需要
    maptools
    ,因为函数使用该包中的
    gcDestination()
接下来,查找以
gg.box2
开头的行,并将其更改为使用
box2\u fill
的值:

  gg.box2 <- geom_polygon(data = box2, aes(x, y), fill = box2_fill, 
    color = "black")
保存将关闭编辑器,并将新函数
my_scalebar
保存到您的工作空间

现在您可以使用新函数了。您可以为新参数
box2\u fill=
legend\u 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')

如果您认为您的编辑是有用的,您可以使用pull请求向包开发人员推荐它们。注意:开发人员似乎已经开始解决这个问题,因为Github版本的
scalebar
有新的
框。fill
st.color
参数。

ggsn::scalebar
看起来不是很可配置,没有重写函数。根据您想要的输出类型,
传单
包可能是一个选项(它用于交互式HTML/JS映射,但也可以生成静态映射)。如果传单解决方案听起来有用,很乐意发布。传单与ggplot2一起使用吗?我的脚本很大一部分取决于能否使用ggplot2在地图顶部绘制内容。非常感谢你!不,传单和ggplot2是分开的。我只能建议查看scalebar函数的代码,看看它是否可以修改。添加了一个说明如何修改函数的答案。对此答案进行了一次编辑:dd2km已折旧。它需要替换为transform=TRUE,dist\u unit=“km”
  gg.box2 <- geom_polygon(data = box2, aes(x, y), fill = box2_fill, 
    color = "black")
else {
    gg.legend <- annotate("text", label = paste0(legend[, 
      "text"], "km"), x = x.st.pos, y = st.dist, size = st.size,
      color = 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')