2013-11-15 66 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点绘制作为箭头