ggmap - stat_binhex 和 scale_fill_gradientn 限制

ggmap - stat_binhex and scale_fill_gradientn limits

我使用 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))

感谢您的帮助

阿尔诺

帮助页面 ?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)))