Tôi tương đối mới đối với ggplot, vì vậy hãy tha thứ cho tôi nếu một số vấn đề của tôi thực sự đơn giản hoặc không thể giải quyết được.Giá trị trung bình của tập dữ liệu điểm cho một tập dữ liệu lưới
Điều tôi đang cố gắng tạo ra là "Bản đồ nhiệt" của một quốc gia nơi việc điền hình dạng liên tục. Hơn nữa tôi có hình dạng của đất nước là .RData
. Tôi đã sử dụng hadley wickham's script để chuyển đổi dữ liệu SpatialPolygon của tôi thành một khung dữ liệu. Dữ liệu dài và lat của khung dữ liệu của tôi bây giờ trông giống như thế này
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
Dữ liệu dài/lat này vẽ phác thảo của Đức. Phần còn lại của khung dữ liệu bị bỏ qua ở đây vì tôi nghĩ rằng nó không cần thiết. Tôi cũng có một khung dữ liệu thứ hai của các giá trị cho một số điểm dài/lat nhất định. Điều này trông giống như thế này
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
Điều tôi muốn làm bây giờ là tô màu mỗi điểm trên bản đồ theo một khoảng cách nhất định. Bằng cách đó tôi sẽ nhận được một màu (liên tục) liên tục của toàn bộ bản đồ của đất nước. Những gì tôi có cho đến nay là bản đồ của nước này âm mưu với ggplot2
ggplot(my_df,aes(long,lat)) + geom_polygon(aes(group=group), fill="white") +
geom_path(color="white",aes(group=group)) + coord_equal()
Idea đầu tiên của tôi là để tạo ra điểm nằm trong bản đồ đã được vẽ và sau đó tính toán giá trị cho tất cả các điểm tạo my_generated_point
như vậy
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)
Tôi chưa tìm được cách tạo ra các điểm này. Và như với toàn bộ vấn đề, tôi thậm chí không biết nếu nó có thể giải quyết theo cách này. Câu hỏi của tôi bây giờ là nếu có một cách để tạo ra những điểm này và/hoặc nếu có một cách khác để đi đến một giải pháp.
Giải pháp
Nhờ Paul Tôi gần như nhận được những gì tôi muốn. Đây là một ví dụ với dữ liệu mẫu cho Hà Lan.
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")
Vui lòng tạo một ví dụ có thể tái sản xuất. –
Tôi có một cảm giác bạn đang tìm kiếm một thuật toán nội suy, xem bài viết của tôi dưới đây cho một ví dụ bằng cách sử dụng kriging (geostatistics). –
Tuyệt vời bạn đã đăng giải pháp, +1. Điều duy nhất tôi muốn chỉ ra là nó thiếu thư viện (vảy) cho hàm "bị tắt tiếng". – Eduardo