2013-12-10 97 views
4

我在使用R/ggmap繪製密度圖時遇到了問題。我的數據是這樣的:帶ggmap的截斷密度多邊形

> head(W) 
     date lat  lon dist 
1 2010-01-01 31.942 -86.659 292.415 
2 2010-01-10 32.970 -84.174 89.121 
3 2010-01-17 31.000 -85.363 319.552 
4 2010-01-17 31.457 -83.951 258.501 
5 2010-01-17 31.073 -81.987 373.915 
6 2010-01-17 33.210 -83.149 129.927 

,我使用這個陰謀是:

ggmap(atlanta.map, extent = "panel") + 
    geom_point(data = W, aes(x = lon, y = lat)) + 
    geom_density2d(data = W, aes(x = lon, y = lat)) + 
    stat_density2d(data = W, aes(x = lon, y = lat, fill = ..level.., 
    alpha = ..level..), size = 0.01, bins = 8, geom = 'polygon') + 
    theme(axis.title = element_blank()) + 
    scale_fill_gradient(low = "yellow", high = "red") + 
    scale_alpha(range = c(.5, .75), guide = FALSE) 

不過,雖然外形看起來精緻而一些多邊形的都還行,相交邊界獲得的多邊形分成兩部分:正確的「平滑」部分和關閉多邊形的直線部分。這兩部分在地圖邊界相遇。

我的數據超出了地圖的邊界,因此KDE有足夠的信息來推導密度一直到邊界的有意義估計。

有沒有人知道問題可能是什麼?而且,更重要的是,我該如何解決它?

謝謝, Andrew。

enter image description here

回答

3

依照一些另外的谷歌搜索和SO打獵左右,我已經把解決方案。

ggmap(map, extent = "normal", maprange=FALSE) %+% W + aes(x = lon, y = lat) + 
    geom_density2d() + 
    stat_density2d(aes(fill = ..level.., alpha = ..level..), 
        size = 0.01, bins = 16, geom = 'polygon') + 
    scale_fill_gradient(low = "green", high = "red") + 
    scale_alpha(range = c(.00, .25), guide = FALSE) + 
    coord_map(projection="mercator", 
       xlim=c(attr(map, "bb")$ll.lon, attr(map, "bb")$ur.lon), 
       ylim=c(attr(map, "bb")$ll.lat, attr(map, "bb")$ur.lat)) + 
    theme(legend.position = "none", axis.title = element_blank()) 
+0

那麼是什麼修復? – rrs

+0

太棒了!我也只是需要這個,這是從「面板」改爲「正常」,並添加'coord_map(....)+',以便直接從形狀範圍指定限制,從而順利地完成了工作。 –