2011-02-14 100 views
13

我最近發現,使用Tableau Public在背景圖片和地圖上使用背景圖片和地圖數據是多麼容易。這是從他們的website的過程。正如您所看到的,它非常簡單,您只需告訴軟件您要使用的圖像以及如何定義座標。將數據疊加到背景圖片

R中的過程是否簡單?最好的方法是什麼?

回答

21

JPEG

對於JPEG圖像,您可以使用read.jpeg()rimage包。

如:

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

通過接下來的情節命令之前設置面值(新= T),你可以在背景圖片構建完整的情節。 (見?par進一步回落)

PNG

PNG圖像,你可以使用readPNGpng上傳軟件包。使用readPNG,您需要使用rasterImage命令進行繪圖(另請參閱幫助文件)。在Windows上,人們必須擺脫alpha通道,因爲到目前爲止,Windows無法應對每個像素的alpha通道。西蒙Urbanek是這麼好心地指出此解決方案:

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

GIF文件,你可以使用read.gifcaTools。問題是,這個旋轉矩陣,所以你必須調整它:

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) 

要繪製了這張圖片,你必須正確地設置面值,如:

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

發現我嘗試在2.10和2.12.1,並安裝銳美包兩次都得到了相同的錯誤。我使用的是Windows XP:警告:無法爲庫http://www.stats.ox.ac.uk/pub/RWin/bin/windows/contrib/2.10 警告信息訪問指數: 在getDependencies(PKGS,依賴,available,lib): 包'rimage'不可用 – Btibert3

+0

@ Btibert3:我可以從www.freestatistics.org/cran安裝這兩個程序都沒有問題。無論如何,嘗試獲得另一個存儲庫,在http://cran.r-project.org/mirrors.html上提到的一個鏡像之一將會做到。 –

+0

我的工作筆記本電腦有問題,出於某種原因。我只是試過我的個人筆記本電腦,並沒有問題安裝。最後,我應該說這是一個GIF文件。 – Btibert3

5

我不是確定你想要做的一部分就是所謂的「地理參照」 - 這是一種拍攝沒有座標信息的圖像,並精確地定義了它如何映射到現實世界。

爲此,我將使用Quantum GIS,一種免費和開源的GIS軟件包。作爲柵格圖層加載到圖像中,然後啓動地理配準插件。點擊圖像上的一些已知點並輸入這些點的緯度長實際座標。一旦你有足夠的這些,地理參考者將解決如何拉伸和移動你的圖像到它在地球上的真實位置,並寫出一個'世界檔案'。

然後,R應該能夠使用rgdal包中的readGDAL以及可能的光柵包來讀取它。

+1

感謝您的幫助。該圖片實際上沒有任何地理屬性;這是一個曲棍球場,我想要在它上面繪製X/Y座標。我的圖片是一個GIF文件。 – Btibert3

2

對於JPEG圖像,您可以使用jpeg libraryggplot2 library

通常情況下,我發現軸的像素漸變和垂直軸在向下方向變爲正值並且圖片保持其原始高寬比時非常有用。所以我可以用計算機視覺算法產生的輸出直接提供R,例如該算法可以檢測彈孔並從拍攝目標圖片中提取孔座標,然後R可以使用目標圖像作爲背景繪製二維直方圖。

我的代碼是由baptiste基於代碼的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