簡體   English   中英

R,ggmap和ggplot的熱圖

[英]heatmap with R,ggmap and ggplot

我想在地圖上繪制事件(舊金山)。 由於我的事件太多了(800k點),所以我最終遇到了過度繪圖的問題。 因此,為了避免這種情況,我想進行二維密度計算以獲取所需的見解。 問題在於,雖然事件遍布整個地圖,但是geom_density2d僅說明了該城市的一小部分。 當然,預期的結果是幾乎覆蓋整個城市的人口密度。

 a<-get_map("San Francisco",zoom=12,source='osm')

 ggmap(a,extent='device')+    geom_density2d(data=train,aes(x=X,y=Y))+  
 stat_density2d(data=train,aes(x=X,y=Y,fill=..level..,alpha=..level..),
                  geom='polygon')

在此處輸入圖片說明

-------------------------------------------------- ------------

首先,@ ajrwhite感謝您的回答和態度。 您也很正確,當處理如此大的數據集時,您必須將其子集以進行實驗。 就箱的數量而言,我認為像geom_density一樣,最佳內核箱寬/箱數是在內部計算的。 看起來,在二維情況下,您必須自己調整它。

現在,您提到的我的問題是,我從未想到過城市中的犯罪會如此集中。 這個發現是如此明顯,以至於我的輸出似乎是錯誤的。 事實證明,城市就是這種情況。 這個人對這個數據集的各種可視化也有更詳細的方法。

https://www.kaggle.com/mircat/sf-crime/violent-crime-mapping

最后,感謝您的重定向。 實際上,該主題涉及面很廣。

因此,我從Kaggle獲取San Francisco Crime數據 ,我懷疑這是您使用的數據集。

首先,提出一個建議-假設此數據集中有878,049行,請抽取5,000個樣本,然后使用該樣本進行圖的實驗。 這將為您節省很多時間:

train_reduced = train[sample(1:nrow(train), 5000),]

然后,您可以輕松地繪制個別案例,以更好地了解正在發生的事情:

ggmap(a,extent='device') + geom_point(aes(x=X, y=Y), data=train_reduced)

現在我們可以看到坐標和數據正確對齊:

舊金山犯罪地圖

因此,您的問題很簡單,就是犯罪集中在城市的東北部。

返回到密度等高線,我們可以使用bins參數來提高等高線間隔的精度:

ggmap(a,extent='device') +
  geom_density2d(data=train_reduced,aes(x=X,y=Y), bins=30) +
  stat_density2d(data=train_reduced,aes(x=X,y=Y,fill=..level.., alpha=..level..), geom='polygon')

這為我們提供了更多信息,將情節擴展到城市的低犯罪率地區:

30箱舊金山犯罪輪廓圖

有無數種方法可以改善這些圖的美觀性和一致性,但是這些方法已經在StackOverflow的其他地方進行了介紹,例如:

如果您使用較小的數據集樣本,則應該能夠非常快速地嘗試這些想法,並找到最適合您要求的參數。 順便說一句,ggplot2文檔非常出色。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM