ggmap - stat_binhex和scale_fill_gradientn限制

时间:2016-02-22 09:43:09

标签: ggmap

我使用ggmap和stat_binhex来显示给定区域中船的密度。我不想显示所有位置,只显示我真正具有高密度位置的位置。

enter image description here

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

感谢您的帮助

阿诺

1 个答案:

答案 0 :(得分:0)

帮助页面?scale_fill_gradientn指向?continuous_scale,其中指出您可以使用NA(或NA_real_)来获取您不想手动设置的限制。使用虚拟数据集:

high density bins visualized

以下是完整的代码:

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)))