2014-12-29 4 views
1

Я рисую ноги маршрута в ggmap. Пока это работает. Я пытался добавить метку, содержащую порядок (n из цикла) каждой ножки.Добавить ярлык для отображения при каждом запуске ноги

Я попытался + geom_text к geom_leg(), но я получаю сообщение об ошибке:

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

Это близко? (Примечание: это вызывает ваш список пунктов 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(...), а затем использует mapply(...) для вызова route(...) с обоих векторов, возвращая общий список координат в кадре rte данных. Поскольку координаты хранятся как, например, $startLat и $endLat, мы формируем рамку данных coords, добавляя окончательные $endLat и $endLong к rte, чтобы получить самую последнюю ногу маршрута. Затем мы используем geom_path(...), чтобы нарисовать путь за один шаг. Наконец, мы используем geom_text(...) с x и y-значениями из исходного кадра данных way.points, и мы используем geom_point(...), чтобы они немного выделялись.

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 функции, вы должны получить (примерно) желаемый результат. Я мог бы перевернуть переменные и lon, и вы, вероятно, захотите изменить размер, местоположение и т. Д. Надеюсь, это поможет!

Смежные вопросы