我正在绘制一条路线的腿到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
}
答案 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
,我们通过将最终$endLat
和coords
添加到$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
函数中,您应该(大致)获得所需的结果。我可能已经改变了lat
和lon
变量,你可能想要调整大小,位置等。希望这会有所帮助!