我对ggplot比较新,所以请原谅我,如果我的一些问题很简单或根本无法解决。点数据集到网格数据集的平均值
我想要做的是生成一个国家的“热图”,形状的填充是连续的。此外,我的国家形状为.RData
。我使用hadley wickham's script将SpatialPolygon数据转换为数据框。我的数据帧的长和经度数据现在看起来像这样
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
这个long/lat数据绘制了德国的轮廓。数据框的其余部分在这里省略,因为我认为它不是必需的。对于特定的长/经点,我还有第二个数据框。这看起来像这样
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")
请做一个可重现的例子。 – 2011-12-19 15:17:08
我有一种感觉,你正在寻找一种插值算法,请参阅下面我的帖子,以克里格(地质统计学)为例。 – 2011-12-19 15:53:34
很棒,你已经发布了解决方案,+1。我唯一要指出的是它缺少“静音”功能的库(缩放)。 – Eduardo 2013-06-02 19:36:16