添加标签以在每个腿部开始时进行贴图

时间:2014-12-29 22:23:28

标签: r ggmap

我正在绘制一条路线的腿到ggmap。到目前为止它工作正常。我一直在尝试添加一个包含每条腿的顺序(来自循环的n)的标签。

我在geom_leg()上尝试过+ geom_text但是我收到了错误:

Error in geom_leg(aes(x = startLon, y = startLat, xend = endLon, yend = endLat),  : 
  non-numeric argument to binary operator

我很感激任何帮助添加标签以表明腿部。

数据:

structure(c("53.193418", "53.1905138631287", "53.186744", "53.189836", 
"53.1884117", "53.1902965", "53.1940384", "53.1934748", "53.1894004", 
"53.1916771", "-2.881248", "-2.89043889005541", "-2.890165", 
"-2.893896", "-2.88802", "-2.8919373", "-2.8972299", "-2.8814698", 
"-2.8886692", "-2.8846099"), .Dim = c(10L, 2L))

功能:

create.map<-function(lst){

library("ggmap")


cncat<-c(paste(lst[,1],lst[,2],sep=","))

df2<-data.frame(cncat)

leg <-function(start, dest, order){

  r<- route(from=start,to=dest,mode = c("walking"),structure = c("legs"))  
  c<- geom_leg(aes(x = startLon, y = startLat,xend = endLon, yend = endLat),
               alpha = 2/4, size = 2, data = r,colour = 'blue')+
    geom_text(aes(label = order), size = 3)

  return (c)
}

a<-qmap('Chester, UK', zoom = 15, maptype = 'road')  

for (n in 1:9){
  l<-leg(as.character(df2[n,1]), as.character(df2[n+1,1]),n)  
  a<-a+l
}

a

}

2 个答案:

答案 0 :(得分:2)

这是否接近? (注意:这会调用您的积分列表way.points)。

way.points <- as.data.frame(way.points,stringsAsFactors=FALSE)
library(ggmap)
rte.from <- apply(way.points[-nrow(way.points),],1,paste,collapse=",")
rte.to   <- apply(way.points[-1,],1,paste,collapse=",")
rte      <- do.call(rbind,
                    mapply(route, rte.from, rte.to, SIMPLIFY=FALSE,
                           MoreArgs=list(mode="walking",structure="legs")))
coords   <- rbind(as.matrix(rte[,7:8]),as.matrix(rte[nrow(rte),9:10]))
coords   <- as.data.frame(coords)
ggm <- qmap('Chester, UK', zoom = 15, maptype = 'road')  
ggm +
  geom_path(data=coords,aes(x=startLon,y=startLat),color="blue",size=2)+
  geom_point(data=way.points,aes(x=as.numeric(V2),y=as.numeric(V1)),
             size=10,color="yellow")+
  geom_text(data=way.points,
            aes(x=as.numeric(V2),y=as.numeric(V1), label=seq_along(V1)))

所以这会使用apply(...)汇总from和to坐标的向量,然后使用mapply(...)用两个向量调用route(...),返回数据框中的整体坐标列表{{ 1}}。因为坐标存储为例如rte$startLat,我们通过将最终$endLatcoords添加到$endLat来形成$endLong数据框,以获得最后一段路线。然后我们使用rte一步绘制路径。最后,我们将geom_path(...)与原始geom_text(...)数据框中的x和y值一起使用,我们使用way.points只是为了让它们脱颖而出。

答案 1 :(得分:1)

这是一个简单的解决方案。我刚刚将标签添加到完成的ggmap对象a。如果替换

 a 

lst2 <- data.frame(cbind(lst, leg = as.character(1:10) )
names(lst2) <- c("lat", "lon", "leg")
a <- a + geom_text(data=lst2,aes(x=lon,y=lat,label=leg),size=5, vjust = 0, hjust = -0.5)
return(a)

create.map函数中,您应该(大致)获得所需的结果。我可能已经改变了latlon变量,你可能想要调整大小,位置等。希望这会有所帮助!