我使用ggmap和stat_binhex来显示给定区域中船的密度。我不想显示所有位置,只显示我真正具有高密度位置的位置。
所以我使用" scale_fill_gradientn"使用limits参数来过滤所有少于500个位置的六边形。 limit参数需要指定最低值和最高值。虽然它对于最低值很好,但我不想手动指定最高值(目前为100000),而是从" stat_binhex"结果。你知道它是否可行以及我该如何做到这一点?
这是我目前的代码:
ggmap(map, extent = "panel", maprange=FALSE) +
coord_cartesian() +
theme(legend.position='none') +
geom_point(data=positions, aes(x=positions$x, y=positions$y), alpha=0.1, size=0.01, color="grey") +
stat_binhex(data=positions, aes(x,y), binwidth=c(0.05, 0.05)) +
scale_fill_gradientn( colours= brewer.pal( 6, "YlGn"),
na.value = NA, trans= "log10", limits=c(500,100000))
感谢您的帮助
阿诺
答案 0 :(得分:0)
帮助页面?scale_fill_gradientn
指向?continuous_scale
,其中指出您可以使用NA
(或NA_real_
)来获取您不想手动设置的限制。使用虚拟数据集:
以下是完整的代码:
library(ggmap)
library(RColorBrewer)
left <- -4.8
bottom <- 45.8
right <- -1.2
top <- 48.2
map <- get_stamenmap(c(left, bottom, right, top),
maptype = "toner", zoom = 8)
positions <- data.frame(x = rnorm(5e5, mean = -4, sd = 0.5),
y = rnorm(5e5, mean = 46.5, sd = 0.3))
positions <- positions[with(positions, x > left & x < right &
y > bottom & y < top), ]
print(ggmap(map, extent = "panel", maprange=FALSE) +
coord_cartesian() +
theme(legend.position="none") +
geom_point(data=positions, aes(x, y), alpha=0.1, size=0.01,
color="grey") +
stat_binhex(data=positions, aes(x, y), binwidth=c(0.05, 0.05)) +
scale_fill_gradientn(colours = brewer.pal( 6, "YlGn"),
na.value = NA, trans= "log10", limits = c(500, NA)))