向 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.color
和 box.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.fill
和 st.color
参数。
我正在努力在我的一些地图中插入比例尺。我使用 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.color
和 box.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.fill
和 st.color
参数。