【发布时间】:2018-09-29 07:39:24
【问题描述】:
我正在尝试使用 ggsn::scalebar() 将比例尺添加到 ggplot 地图,但是尽管尝试了许多不同的参数组合,但我总是会遇到一些错误。这是我的地图的代码:
# load libraries
library(tidyverse)
library(viridis)
library(sp)
library(rgdal)
library(ggsn)
# data
my.data.df <- data.frame(value = c(-1.2269832, -1.0153486, -0.9581069, -1.1534667, -1.0139735, -0.8711997, -0.8618286, -0.8524683),
x = c(538127.3, 538129.3, 538125.3, 538127.3, 538129.3,538131.3, 538121.3, 538123.3),
y = c(1101055, 1101055, 1101053, 1101053, 1101053, 1101053, 1101051, 1101051))
bb <- data.frame(long = c(538107, 538142), lat = c(1101020.5, 1101058.5))
# make a map
my.map <- ggplot(my.data.df, aes(x=x, y=y, fill=value)) +
geom_tile() +
geom_path(data = lines, aes(x=long, y=lat, group=group), inherit.aes = FALSE) +
scale_fill_viridis("Subsidence (m)",
limits = c(-1.5, 0.5)) +
scale_x_continuous(limits = c(538107, 538142)) +
scale_y_continuous(limits = c(1101020.5, 1101058.5)) +
coord_fixed() +
theme(plot.title = element_text(hjust = 0.5),
axis.title = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
legend.justification=c(1,0),
legend.position=c(1,0),
plot.margin=unit(c(0,0,0,0), "cm"))
Take a look at the map here.当我尝试在地图上添加比例尺时出现问题:
my.map +
scalebar(dist = 5, dd2km = FALSE, dist_unit = 'm', location = 'bottomleft')
这会返回错误:
比例尺错误(dist = 5, dd2km = FALSE, dist_unit = "m", location = "bottomleft") : 参数 "x.min" 丢失,没有默认值
添加 x.min、x.max、y.min、y.max:
my.map +
scalebar(dist = 5, dd2km = FALSE, dist_unit = 'm', location = 'bottomleft', x.min = 538107, x.max = 538142, y.min = 1101020.5, y.max = 1101058.5)
返回此错误:
FUN(X[[i]], ...) 中的错误:找不到对象“值”
尝试添加数据参数:
my.map +
scalebar(data = my.data.df, dist = 5, dd2km = FALSE, dist_unit = 'm', location = 'bottomleft', x.min = 538107, x.max = 538142, y.min = 1101020.5, y.max = 1101058.5)
返回错误:
错误:
data必须唯一命名,但在其中有重复的列 另外:警告消息:1:在 min(data$long) 中:没有非缺失 min 的参数;返回 Inf 2: In max(data$long) : no non-missing 最大参数;返回 -Inf 3: In min(data$lat) : no non-missing min 的参数;返回 Inf 4: In max(data$lat) : no non-missing 最大参数;返回 -Inf
最后,我发现帮助说 scalebar() 中的数据参数实际上是在寻找一个边界框作为数据框,所以我尝试使用它:
my.map +
scalebar(data = bb, dist = 5, dd2km = FALSE, dist_unit = 'm', location = 'bottomleft', x.min = 538107, x.max = 538142, y.min = 1101020.5, y.max = 1101058.5)
但出现此错误:
FUN(X[[i]], ...) 中的错误:找不到对象“值”
我想知道添加比例尺是否会导致 ggplot 出现问题,因为它不再将“值”识别为数据框中的列以用于填充两次尝试。但是,我真的不确定。任何见解或解决方案将不胜感激!
【问题讨论】:
-
我实际上无法用
ggsn0.4.0 完全复制您的问题。例如,dist_unit = "m"是一个未使用的参数,当我将其取出时,我收到以下消息:argument "model" is missing, with no default。 (由于theme_few(),您还需要在代码中调用library(ggthemes),但这是一个小问题。)您可以再次检查代码吗? -
试试
my.map + scalebar(my.data.df, dist = 0.01, height = 0.2, location = 'topleft') -
@Kim,感谢您的评论。我打算从我的例子中取出 theme.few() ,但一定忘记了。我已经编辑了问题以删除它。我正在使用 ggsn 0.4.8,因此您遇到的错误非常不同。
-
@Tung,该代码给了我这个错误: 比例尺错误(C17_09_df,dist = 0.01,height = 0.2,location = “topleft”):dd2km 应该是合乎逻辑的,当我添加 dd2km = FALSE,它告诉我缺少 min 和 max 参数。
标签: r