2012-06-22 32 views
5

Tôi có khung dữ liệu chứa số (x,y,z) điểm dữ liệu, (x,y) là tọa độ thấp hơn bên phải của ô có vĩ độ kinh độ w (ví dụ: lưới 1 độ) . Giá trị z đã được tính trung bình trên ô này.R Lô ô lưới vĩ độ có kinh độ trên bản đồ

Tôi muốn vẽ các điểm này trong R sao cho toàn bộ ô lưới được lấp đầy với một số màu bắt nguồn từ z.

Kết quả sẽ trông giống như một trong những hình ảnh này: longitude-latitude grid cells filled

Các chiếu bản thân (ví dụ chiếu Lambert Conformal Conic, equirectangular) là không quan trọng, chỉ là âm mưu tế bào lưới.

Dữ liệu của tôi thưa thớt: không phải mọi ô kinh độ vĩ độ đều có dữ liệu được liên kết với nó.

Hy vọng của tôi sẽ là một giải pháp tương tự để

library(maps) 
map("state") 
grid_points(my_data,c("x","y","z"),0.5) 

nơi 0,5 là độ phân giải lưới trên, cho thấy một tế bào 0,5 độ.

Mọi suy nghĩ?

Cảm ơn!

+1

tôi niềm vui, @PaulHiemstra . Câu trả lời của bạn là sự chú ý về những gì cần tìm, tôi chỉ muốn kết hợp mọi thứ với nhau nhiều hơn một chút. Cám ơn rất nhiều về sự giúp đỡ của bạn. – Richard

Trả lời

6

Một thay thế cho việc sử dụng một trong hai spplot hoặc image là sử dụng ggplot2. Hình dạng liên quan là geom_rastergeom_tile. Việc đầu tiên là nghĩa vụ phải thực hiện tốt hơn và mang lại các tập tin nhỏ hơn, và thứ hai là tiêu chuẩn hơn.sau cuộc gọi Ví dụ:

ggplot(aes(x = x, y = y, fill = value), data = dat_grid) + geom_tile() + 
    geom_path(data = ant_ggplot) 

orginates từ this blogpost của tôi. Ngoài ra, ggplot2 hỗ trợ một loạt các dự báo thông qua gói mapproj, xem coord_map để biết thêm chi tiết.

Sau đây là một ví dụ làm việc (với điều kiện bạn đã xác định YOUR_DATA có x, y, z cột):

library(ggplot2) 
library(maps) 
us_states <- map_data("state") 
(ggplot(aes(x=x,y=y,fill=z),data=YOUR_DATA) + geom_tile())+geom_polygon(data=us_states,aes(x=long, y=lat, group=group), colour="black", fill="white", alpha=0) 
3

Nếu data.frame của bạn là "x", hãy thử này:

library(sp) 
coordinates(x) <- c("x", "y", "z") 
gridded(x) <- TRUE 
image(x, col = terrain.colors(256), useRaster = TRUE) 

Để có được một thực sự chính xác trả lời, bạn nên cung cấp một mẫu dữ liệu của bạn, hy vọng toàn bộ một data.frame hoặc nguồn, nơi bạn tải xuống và mã bạn đã sử dụng để đọc nó vào R.

Nếu mã ở trên không thành công ở bước gridded()<- thì có thể các giá trị xy của bạn không thực sự cung cấp lưới thường xuyên, được ngụ ý bởi các ô của bạn. Nếu chúng thực sự là các giá trị kinh độ/vĩ độ có giá trị và bạn cần phải chiếu chúng vào những hình ảnh trong hình ảnh của bạn, hãy xem gói raster hoặc thường là gói rgdal.

library(raster) 
?projectRaster 

library(rgdal) 
?project 
?spTransform 

(Các lô tìm đến tôi như một trong những "Diện tích Equal Albers và Lambert Conformal Conic Dự của Bắc Mỹ" như thể hiện trên trang web này: http://www.colorado.edu/geography/gcraft/notes/mapproj/mapproj_f.html).

Xem http://spatialreference.org để nhận chuỗi PROJ.4 cho phép chiếu mà bạn có thể sử dụng trong sp hoặc raster.

+0

Bản thân phép chiếu không quan trọng, chỉ là âm mưu của ô lưới. Tôi sẽ chỉnh sửa câu hỏi để phản ánh điều này. – Richard

+0

Câu trả lời của tôi vẫn có liên quan. Nó cũng hoạt động cho các tọa độ thưa thớt, miễn là chúng đều đặn. Nếu không biết phép chiếu hoặc bất kỳ thứ gì về dữ liệu của bạn, chúng tôi chỉ có thể đoán, và phép chiếu rất quan trọng cho đến khi bạn cung cấp cho chúng tôi đủ chi tiết để biết những gì bạn thực sự có và thực sự muốn với những đường lưới đó. – mdsumner

2

tôi đã cố gắng để làm điều đó loại đồ thời gian gần đây và kết thúc sử dụng chức năng interp của thư viện akima để intrapolate dữ liệu z của tôi vào một mạng lưới thường xuyên trước khi âm mưu (bất kỳ loại dự báo sẽ phải được thực hiện trước khi việc sử dụng các interp) :

library(akima) 
interp(x,y,z,xo=seq(min(x),max(x),by=0.5),yo=seq(min(y),max(y),by=0.5),extrap=FALSE,linear=TRUE) -> xygrid 
image(xygrid,breaks=seq(min(z),max(z),length=10), col=1:10) 
0

Bạn có thể làm điều này:

library(raster) 
r <- rasterFromXYZ(xyz) 
plot(r) 
Các vấn đề liên quan