2013-11-15 90 views
0

我已經使用g的ggplot2包製作了一個地圖,並且還繪製了一個可視化的geom_path。現在,我想添加幾個標記和一個箭頭,以顯示路徑的方向。對於箭頭來說,有一個名爲grid的包含arrow()函數的包,但如果我在geom_path美學中使用這個函數,它會爲我的路徑的每個點繪製箭頭。所以,我只想繪製一個箭頭(只有一個箭頭),以便可視化路徑的方向。 第二個問題是如何在我的地圖上添加少量標記。我讀過有一個很好的包RGoogleMaps,它允許這樣做,但問題是我正在使用ggplot2。 任何想法如何添加箭頭和標記到我的地圖? 在此先感謝!在地圖上添加一個箭頭和標記R

這裏是我的代碼:

require(move) 
require(ggmap) 
require(mapproj) 
gps <- move(x=temp$GPS_x, y=temp$GPS_y,time=as.POSIXct(temp$GPS_timeDate,  format="%d/%m/%Y %H:%M:%S", tz="UTC"), proj=CRS("+proj=longlat +ellps=WGS84"), animal='unknown', sensor='NoName') 
gps_df <- as(gps, "data.frame") 
m <- get_map(bbox(extent(gps)*1.1), source="osm", zoom=14) 
ggmap(m)+geom_path(data=gps_df[1:nrow(soc_long),], aes(x=temp$GPS_x[1:nrow(soc_long)], y=temp$GPS_y[1:nrow(soc_long)],colour=soc_long$dsoc),size=1.5,lineend="round")+scale_color_gradient(low='green',high='red') 

輸出如下:

enter image description here 這是臨時數據集的一部分:

GPS_timeDate  GPS_x  GPS_y 
13/11/13 14:54:15 10.17936802 54.33073984 
13/11/13 14:54:16 10.17936768 54.33073967 
13/11/13 14:54:17 10.17936735 54.33073951 
13/11/13 14:54:18 10.17936702 54.33073934 
13/11/13 14:54:19 10.17936668 54.33073917 
13/11/13 14:54:20 10.17936635 54.33073901 
13/11/13 14:54:21 10.17936601 54.33073884 
13/11/13 14:54:22 10.17936568 54.33073867 
13/11/13 14:54:23 10.17936535 54.33073851 
13/11/13 14:54:24 10.17936501 54.33073834 
13/11/13 14:54:25 10.17936547 54.33073849 
13/11/13 14:54:26 10.17936597 54.33073866 
13/11/13 14:54:27 10.17936646 54.33073882 
13/11/13 14:54:28 10.17936696 54.33073899 
13/11/13 14:54:29 10.17936745 54.33073915 
13/11/13 14:54:30 10.17936794 54.33073931 
13/11/13 14:54:31 10.17936844 54.33073948 
13/11/13 14:54:32 10.17936893 54.33073964 
13/11/13 14:54:33 10.17936943 54.33073981 
13/11/13 14:54:34 10.17936992 54.33073997 
13/11/13 14:54:35 10.17936943 54.33074 
13/11/13 14:54:36 10.17936875 54.33074 
13/11/13 14:54:37 10.17936807 54.33074 
13/11/13 14:54:38 10.17936739 54.33074 
13/11/13 14:54:39 10.17936671 54.33074 
13/11/13 14:54:40 10.17936603 54.33074 
13/11/13 14:54:41 10.17936535 54.33074 
13/11/13 14:54:42 10.17936467 54.33074 
13/11/13 14:54:43 10.17936399 54.33074 

soc_long數據集的值被用來顏色漸變:

dsoc 
1 0.348334562 
2 0.348334562 
3 0.348334562 
4 0.348334562 
5 0.348334562 
6 0.348334562 
7 0.348334562 
8 0.348334562 
9 0.348334562 
10 0.348334562 
11 0.367477325 
12 0.367477325 
13 0.367477325 
14 0.367477325 
15 0.367477325 
16 0.367477325 
17 0.367477325 
18 0.367477325 
19 0.367477325 
20 0.367477325 
21 0.248041791 
22 0.248041791 
23 0.248041791 
24 0.248041791 
25 0.248041791 
26 0.248041791 
27 0.248041791 
28 0.248041791 
29 0.248041791 
30 0.248041791 

最後,以下品脫是我想添加爲標誌的路徑點:

lat   lon 
54.31545667 10.168515 
54.30135833 10.14450333 
54.30305167 10.137645 
54.3072 10.13840667 
54.31827833 10.13377 
54.32098833 10.12690667 
54.32025833 10.12314 
54.31826833 10.12340333 
54.31540667 10.12799167 
54.31492167 10.13006833 
+0

有一個數據集的工作是有幫助的: http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-可重現的例子 看起來像只是添加箭頭=箭頭()默認將箭頭放在您的路徑的盡頭,如所希望的。如果你想要它在中間的某個地方,考慮對你的路徑進行子集化,並將其作爲一個圖層添加。如果第二個數據集中包含標記,則將其加載到geom_point()中並將其添加到現有的圖中。對不起,沒有一個工作的例子沒什麼幫助 – colcarroll

+0

我已編輯帖子!所以,當我在geom_path()中添加arrow()函數時,每個點都會添加一個箭頭,但我只希望在路徑的末尾添加一個箭頭。 – ArmMiner

+0

謝謝!至少有一部分(或一個)數據集可以重現問題的機會? – colcarroll

回答

2

你可以給數據個別繪圖功能(你需要確保全球美學(中提到的那些在ggplot,ggmap等)匹配雖然。所以你有data.frames第一個是gps_df [1:nrow(soc_long)],第二個是(稱之爲標記)標記的經度和緯度。該列表沒有方向信息。因此,你需要通過移動列計算方向信息以計算方向

markers$lat.after<-c(markers$lat[-1],NA) 
markers$lon.after<-c(markers$lon[-1],NA) 
markers$lat.dir<-with(markers,lat.after-lat) 
markers$lon.dir<-with(markers,lon.after-lon) 

現在你有位置和方向(你現在不需要的方向,但它可能是別的東西很有用) 所以你只需將以下項添加到您的代碼

+geom_segment(data=markers,aes(x=lon,xend=lon.after,y=lat,yend=lat.after),arrow=arrow(length=unit(0.3,"cm"))) 

這可能是箭頭方向過於粗糙,所以你可以改爲做同樣與gps_df場,然後就畫出它的一部分

+geom_segment(data=gps_df[seq(1,nrow(gps_df),5),... 

這隻會每隔5點繪製作爲箭頭