2017-06-25 22 views
0

library(ggmap)stat_density2d()機能でスタティックヒートマップを作成しました。動的なleaflet地図上の光沢のあるアプリでこれを再現したいと思ったら、addHeatmap()が見つかりました。しかし、得られた画像は、類似していません。ggmapのバージョンは一見正しい結果を提供しています。rヒートマップ - stat_density2d(ggmap)とaddHeatmap(光沢のあるリーフレット)

GGMAP

Heatmap on ggmap

LEAFLETこの違いを引き起こしている何

Heatmap on leaflet

以下の再現可能な両方の例を実行するには、ここにいくつかのデータ(csvファイル)をダウンロードできます。 leaflet結果は、ズームレベルによって異なるが、(例えば、最大熱の観点からの場所に)ggmap結果と一致しないこと https://drive.google.com/drive/folders/0B8_GTHBuoKSRR1VIRmhOUTJKYU0?usp=sharing

注意。

これはggmapコードです。

library(ggmap) 
data <- read.csv("DATA.csv", sep=";") 
data <- subset(data, !is.na(CrdLatDeg)) 
xmin <- min(data$CrdLonDeg) 
xmax <- max(data$CrdLonDeg) 
ymin <- min(data$CrdLatDeg) 
ymax <- max(data$CrdLatDeg) 
lon <- c(xmin,xmax) 
lat <- c(ymin,ymax) 
map <- get_map(location = c(lon = mean(lon), lat = mean(lat)), zoom = 17, 
       maptype = "satellite", source = "google") 
ggmap(map) + 
    labs(x="longitude", y="latitude") + 
    stat_density2d(data=data, aes(x=CrdLonDeg, y=CrdLatDeg, alpha= ..level.., fill= ..level..), colour=FALSE, 
       geom="polygon", bins=100) + 
    scale_fill_gradientn(colours=c(rev(rainbow(100, start=0, end=.7)))) + scale_alpha(range=c(0,.8)) + 
    guides(alpha=FALSE,fill=FALSE) 

これはleafletコードです。

library(leaflet.extras) 
data <- read.csv("DATA.csv", sep=";") 
data <- subset(data, !is.na(CrdLatDeg)) 
leaflet(data) %>% 
    addTiles(group="OSM") %>% 
    addHeatmap(group="heat", lng=~CrdLonDeg, lat=~CrdLatDeg, max=.6, blur = 60) 
+0

画像はどのように見えますか?それを見ずに違いを伝えるのは難しいです。 – IvanSanchez

+0

@IvanSanchez:私はデータとコードを提供していますので、自分でイメージを作成できるはずですか?私はここに画像を埋め込むことは許されていないので、画像の結果を同じリンクにアップロードしました。 –

+0

私はリーフレットとヒートマップのアルゴリズムは個人的には知っていますが、Rについての最初のことは分かりません。例を実行することは、例を実行する時間を費やすことを意味します。データとコードを持つことは非常に良いことですが、可能であれば、他の人が問題をより簡単に見られるようにする必要があります。画像をどこかにアップロードすると、投稿を編集して追加することができます。 – IvanSanchez

答えて

2

アルゴリズムが異なるため、画像が異なって見えます。

stat_density2d()離散データからprobability density functionを外挿する。

ヒートマップのリーフレットの実装は、simpleheat,heatmap.jsまたはwebgl-heatmapのようなライブラリに依存しています。これらのヒートマップに確率密度に依存しません。 (私はこれらのどれがrリーフレットのaddHeatmapによって使用されているか完全にはわかりません)。

代わりに、これらのヒートマップは、各点のぼかし円を描き、点の強度(場合によっては定数)に正比例した量だけ各ピクセルの値を上げ、点と円。すべてのデータポイントがサーマルとしてヒートマップに表示されます。あなたは、またはあなたの画像の右上には、この唯一のポイントを見て、the heatmap.js webpageでマウスカーソルで遊んで、これを見ることができます:関数の可視化などのヒートマップの

heatmap of a lone point

考える

F(ピクセル)=Σ(MAX(0、半径 - 距離(ピクセル、ポイント))・強度(点))

一つは半径とヒートマップの強度を調整することができ、その結果は意志ネverは統計密度推定と同じです。

+0

ありがとう!それから私はaddPolygonsを使用し、計算された密度推定を使用すると思います。 –

1

どちらも異なるアルゴリズムを使用します。あなたはradiusblur引数をaddHeatmaph引数をstat_density2dと微調整する必要があります。

+0

まあ、私はかなり微調整してきましたが、決して一見似ていません。ポイントの密度を示す 'リーフレット'オプションが必要です。これは、現在の 'addHeatmap'の使用では起こりそうにないようです。なぜなら、引数に与えられた値に関係なく、一番暖かい色(赤色)で最大濃度未満の領域が強調表示されるからです。 –

関連する問題