私は ggplot に比較的慣れていないので、私の問題のいくつかが本当に単純であるか、まったく解決できない場合は、ご容赦ください。
私がやろうとしているのは、形状の塗りつぶしが連続している国の「ヒート マップ」を生成することです。さらに、国の形をしてい.RData
ます。Hadley wickham のスクリプトを使用して、SpatialPolygon データをデータ フレームに変換しました。データ フレームの long と lat のデータは次のようになります
head(my_df)
long lat group
6.527187 51.87055 0.1
6.531768 51.87206 0.1
6.541202 51.87656 0.1
6.553331 51.88271 0.1
この緯度経度データは、ドイツの輪郭を描きます。残りのデータ フレームは必要ないと思うのでここでは省略します。特定の経度/緯度点の値の 2 番目のデータ フレームもあります。これはこのように見えます
my_fixed_points
long lat value
12.817 48.917 0.04
8.533 52.017 0.034
8.683 50.117 0.02
7.217 49.483 0.0542
私が今やりたいことは、そのポイントから特定の距離内にあるすべての固定ポイントの平均値に従って、マップの各ポイントに色を付けることです。そうすれば、国の地図全体を (ほぼ) 連続して塗りつぶすことができます。私がこれまでに持っているのは、ggplot2 でプロットされた国の地図です。
ggplot(my_df,aes(long,lat)) + geom_polygon(aes(group=group), fill="white") +
geom_path(color="white",aes(group=group)) + coord_equal()
私の最初のアイデアは、描画されたマップ内にあるポイントを生成し、生成されたすべてのポイントの値を次のmy_generated_point
ように計算することでした
value_vector <- subset(my_fixed_points,
spDistsN1(cbind(my_fixed_points$long, my_fixed_points$lat),
c(my_generated_point$long, my_generated_point$lat), longlat=TRUE) < 50,
select = value)
point_value <- mean(value_vector)
ただし、これらのポイントを生成する方法は見つかりませんでした。そして、問題全体と同様に、この方法で解決できるかどうかさえわかりません。私の質問は、これらのポイントを生成する方法が存在するかどうか、および/または解決策に到達する別の方法があるかどうかです。
解決
ポールのおかげで、私はほとんど欲しいものを手に入れることができました。オランダのサンプル データの例を次に示します。
library(ggplot2)
library(sp)
library(automap)
library(rgdal)
library(scales)
#get the spatial data for the Netherlands
con <- url("http://gadm.org/data/rda/NLD_adm0.RData")
print(load(con))
close(con)
#transform them into the right format for autoKrige
gadm_t <- spTransform(gadm, CRS=CRS("+proj=merc +ellps=WGS84"))
#generate some random values that serve as fixed points
value_points <- spsample(gadm_t, type="stratified", n = 200)
values <- data.frame(value = rnorm(dim(coordinates(value_points))[1], 0 ,1))
value_df <- SpatialPointsDataFrame(value_points, values)
#generate a grid that can be estimated from the fixed points
grd = spsample(gadm_t, type = "regular", n = 4000)
kr <- autoKrige(value~1, value_df, grd)
dat = as.data.frame(kr$krige_output)
#draw the generated grid with the underlying map
ggplot(gadm_t,aes(long,lat)) + geom_polygon(aes(group=group), fill="white") + geom_path(color="white",aes(group=group)) + coord_equal() +
geom_tile(aes(x = x1, y = x2, fill = var1.pred), data = dat) + scale_fill_continuous(low = "white", high = muted("orange"), name = "value")