2011-02-14 46 views
13

Gần đây tôi đã tìm ra cách dễ dàng để sử dụng hình nền và dữ liệu bản đồ trên đầu trang bằng cách sử dụng Tableau Công cộng. Đây là quy trình từ số website của họ. Như bạn có thể thấy, nó khá đơn giản và bạn chỉ cần cho phần mềm biết hình ảnh bạn muốn sử dụng và cách xác định tọa độ.Dữ liệu lớp phủ lên hình nền

Quy trình có đơn giản trong R không? Cách tiếp cận tốt nhất là gì?

Trả lời

21

JPEG

Đối với hình ảnh jpeg, bạn có thể sử dụng read.jpeg() từ gói rimage.

ví dụ:

anImage <- read.jpeg("anImage.jpeg") 
plot(anImage) 
points(my.x,my.y,col="red") 
... 

Bằng cách đặt mệnh (mới = T) trước khi lệnh cốt truyện tiếp theo, bạn có thể xây dựng lô hoàn toàn một bức tranh nền. (Xem ?par và tiếp tục xuống)

PNG

hình ảnh PNG bạn có thể tải sử dụng readPNG từ gói png. Với readPNG, bạn cần lệnh rasterImage để vẽ (xem thêm các tệp trợ giúp). Trên Windows, người dùng phải loại bỏ kênh alpha vì Windows không thể đối phó với các pixel alpha mỗi pixel cho đến bây giờ. Simon Urbanek là loại như vậy để chỉ ra giải pháp này:

img <- readPNG(system.file("img", "Rlogo.png", package="png")) 
r = as.raster(img[,,1:3]) 
r[img[,,4] == 0] = "white" 

plot(1:2,type="n") 
rasterImage(r,1,1,2,2) 

GIF

Đối với các file gif, bạn có thể sử dụng read.gif từ caTools. Vấn đề là điều này đang quay ma trận, vì vậy bạn phải điều chỉnh nó:

Gif <- read.gif("http://www.openbsd.org/art/puffy/ppuf600X544.gif") 

n <- dim(Gif$image) 
image(t(Gif$image)[n[2]:1,n[1]:1],col=Gif$col,axes=F) 

Để vẽ trên hình ảnh này, bạn phải thiết lập các mệnh một cách chính xác, ví dụ:

image(t(Gif$image)[n[2]:1,n[1]:1],col=Gif$col,axes=F) 
op <- par(new=T) 
plot(1:100,new=T) 
par(op) 
+1

Tôi cố gắng để cài đặt gói RIMAGE trên 2.10 và 2.12.1, và có cùng một lỗi cả hai lần. Tôi đang sử dụng Windows XP: Cảnh báo: không thể truy cập chỉ mục cho kho lưu trữ http://www.stats.ox.ac.uk/pub/RWin/bin/windows/contrib/2.10 Thông báo cảnh báo: Trong getDependencies (pkgs, dependencies , có sẵn, lib): gói 'vành' không có sẵn – Btibert3

+0

@ Btibert3: Tôi có thể cài đặt cả hai mà không có sự cố từ www.freestatistics.org/cran. Hãy thử để có được một kho lưu trữ anyway, một trong những gương của cran được đề cập trên http://cran.r-project.org/mirrors.html sẽ làm. –

+0

Máy tính xách tay của tôi có vấn đề vì một số lý do. Tôi vừa thử máy tính xách tay cá nhân của mình và nó được cài đặt mà không có vấn đề gì. Cuối cùng, tôi nên nói rằng đó là một tập tin GIF. – Btibert3

5

Tôi không chắc chắn rằng một phần của những gì bạn muốn làm là cái gọi là "tham chiếu địa lý" - hành động chụp ảnh không có thông tin tọa độ và xác định chính xác cách nó ánh xạ vào thế giới thực.

Vì điều này tôi muốn sử dụng GIS lượng tử, gói GIS miễn phí và mã nguồn mở. Tải hình ảnh dưới dạng lớp raster, sau đó kích hoạt plugin georeferencing. Nhấp vào một số điểm đã biết trên hình ảnh của bạn và nhập tọa độ thế giới thực trong thời gian dài của những điểm đó. Một khi bạn đã có đủ của những người, georeferencer sẽ làm việc ra làm thế nào để kéo dài và thay đổi hình ảnh của bạn để nó thực sự diễn ra trên hành tinh, và viết một 'tập tin thế giới'.

Sau đó, với R đó sẽ có thể đọc nó bằng cách sử dụng readGDAL từ gói rgdal, và có thể là gói raster quá.

+1

Cảm ơn sự giúp đỡ. Hình ảnh thực sự không có bất kỳ thuộc tính địa lý nào; đó là một sân khúc côn cầu, nơi tôi có hợp âm x/y mà tôi muốn vẽ trên nó. Và hình ảnh của tôi là một tệp GIF. – Btibert3

2

Để có hình ảnh JPEG, bạn có thể sử dụng jpeg libraryggplot2 library.

Thông thường, tôi thấy hữu ích khi trục tốt nghiệp theo pixel và trục dọc sẽ chuyển sang hướng dương và hình ảnh giữ nguyên tỷ lệ khung hình gốc.Vì vậy, tôi có thể nạp R trực tiếp với đầu ra được tạo ra bởi thuật toán thị giác máy tính, ví dụ thuật toán có thể phát hiện lỗ đạn và trích xuất tọa độ lỗ từ ảnh chụp mục tiêu và sau đó R có thể vẽ biểu đồ 2D bằng cách sử dụng ảnh đích làm nền.

Mã của tôi là dựa trên mã bởi baptiste tìm thấy tại https://stackoverflow.com/a/16418186/15485

library(ggplot2) 
library(jpeg) 

img <- readJPEG("bersaglio.jpg") # http://www.tiropratico.com/bersagli/forme/avancarica.jpg 

h<-dim(img)[1] # image height 
w<-dim(img)[2] # image width 

df<-data.frame(x=rnorm(100000,w/1.99,w/100),y=rnorm(100000,h/2.01,h/97)) 
plot(ggplot(df, aes(x,y)) + 
     annotation_custom(grid::rasterGrob(img, width=unit(1,"npc"), height=unit(1,"npc")), 0, w, 0, -h) + # The minus is needed to get the y scale reversed 
     scale_x_continuous(expand=c(0,0),limits=c(0,w)) + 
     scale_y_reverse(expand=c(0,0),limits=c(h,0)) + # The y scale is reversed because in image the vertical positive direction is typically downward 
                 # Also note the limits where h>0 is the first parameter. 
     coord_equal() + # To keep the aspect ratio of the image. 

     stat_bin2d(binwidth=2,aes(fill = ..density..)) + 
     scale_fill_gradient(low = "dark red", high = "red") 
    ) 

enter image description here

df<-data.frame(x=rnorm(100000,100,w/70),y=rnorm(100000,400,h/100)) 
plot(ggplot(df, aes(x,y)) + 
     annotation_custom(grid::rasterGrob(img, width=unit(1,"npc"), height=unit(1,"npc")), 0, w, 0, -h) + # The minus is needed to get the y scale reversed 
     scale_x_continuous(expand=c(0,0),limits=c(0,w)) + 
     scale_y_reverse(expand=c(0,0),limits=c(h,0)) + # The y scale is reversed because in image the vertical positive direction is typically downward 
     # Also note the limits where h>0 is the first parameter. 
     coord_equal() + # To keep the aspect ratio of the image. 

     stat_bin2d(binwidth=2,aes(fill = ..density..)) + 
     scale_fill_gradient(low = "dark red", high = "red") 
) 

enter image description here

Các vấn đề liên quan