2015-01-01 2 views
5

Я черчение маршрута и указует на ggmap и мне нужно добавить легенду перечислить имена, что точки представляют т.е.Добавление легенды/текст таблицы в ggmap с несколькими слоями

1 Билл Харрис, 2 Anne Jones и т. Д.

Я подготовил данные образца.

structure(list(business.names = structure(c(8L, 9L, 5L, 6L, 7L, 
1L, 4L, 3L, 2L, 10L), .Label = c("Bill Harris", "Anne Jones", 
"Sue Perkins", "Morris Jones", "Bert Harris", "Bob Jones", 
"Mike Taylor", "Paul Jones", "John Roberts", 
"Fred Morris"), class = "factor"), X1 = structure(c(7L, 
8L, 10L, 9L, 3L, 2L, 1L, 4L, 5L, 6L), .Label = c("53.186744", 
"53.1884117", "53.1894004", "53.189836", "53.1902965", "53.1905138631287", 
"53.1912196", "53.1916771", "53.193418", "53.1934748"), class = "factor"), 
    X2 = structure(c(7L, 3L, 2L, 1L, 5L, 4L, 6L, 10L, 9L, 8L), .Label = c("-2.881248", 
    "-2.8814698", "-2.8846099", "-2.88802", "-2.8886692", "-2.890165", 
    "-2.8902453", "-2.89043889005541", "-2.8919373", "-2.893896" 
    ), class = "factor")), .Names = c("business.names", "X1", 
"X2"), row.names = c(10L, 9L, 8L, 1L, 7L, 6L, 3L, 4L, 5L, 2L), class = "data.frame") 

Вот мой код на сегодняшний день. Обратите внимание, что для geom_path и geom.route параметр размера & находится за пределами функции AES. Мне не нужно настраивать размер или цвет на основе данных. Если я размещу Размер & Цвет в функцию AES Я получаю легенду, но это не то, что я хочу. Он использует точечные данные, а не название компании.

Я даже не уверен, что легенда - лучший способ пойти. Мне просто нужны данные, отображаемые на диаграмме в простой таблице.

create.map<-function(lst){ 
    require("ggmap") 
    require("qmap") 
    way.points<-data.frame(lapply(lst[,1:3], as.character), stringsAsFactors=FALSE) 
    rte.from <- apply(way.points[-nrow(way.points),2:3],1,paste,collapse=",") 
    rte.to  <- apply(way.points[-1,2:3],1,paste,collapse=",") 
    rte  <- do.call(rbind, 
         mapply(route, rte.from, rte.to, SIMPLIFY=FALSE, 
          MoreArgs=list(mode="walking",structure="legs"))) 


    map.centre<-c(mean(as.numeric(way.points$X2)),mean(as.numeric(way.points$X1))) 

    coords <- rbind(as.matrix(rte[,7:8]),as.matrix(rte[nrow(rte),9:10])) 
    coords <- as.data.frame(coords) 

    ggm <- qmap(location=map.centre,zoom = 15, maptype = "road", legend="topright") 

    ggm + 
    geom_path(data=coords,aes(x=startLon,y=startLat),color="blue",size=2)+ 
    geom_point(data=way.points,aes(x=as.numeric(X2),y=as.numeric(X1)), 
       size=10,color="yellow")+ 
    geom_text(data=way.points, 
       aes(x=as.numeric(X2),y=as.numeric(X1), label=seq_along(X1))) 

} 
+0

Должен ли он быть на карте? – hrbrmstr

ответ

8

Это одна из возможностей. Вы можете захотеть упорядочить названия предприятий и использовать geom_point еще раз, чтобы создать легенду. В этом geom_point вы используете alpha = 0. Поэтому вы не видите никаких точек; вы просто видите желтые точки, как указано в первом geom_point. Здесь ваши данные называются mydf.

foo <- mutate(mydf, business.names = paste(seq_along(X1), business.names, sep = " ")) 

# business.names    X1    X2 
#1 1 Paul Jones  53.1912196  -2.8902453 
#2 2 John Roberts  53.1916771  -2.8846099 
#3 3 Bert Harris  53.1934748  -2.8814698 
#4  4 Bob Jones  53.193418   -2.881248 
#5 5 Mike Taylor  53.1894004  -2.8886692 
#6 6 Bill Harris  53.1884117   -2.88802 
#7 7 Morris Jones  53.186744   -2.890165 
#8 8 Sue Perkins  53.189836   -2.893896 
#9 9 Anne Jones  53.1902965  -2.8919373 
#10 10 Fred Morris 53.1905138631287 -2.89043889005541 

create.map<-function(lst){ 
require("ggmap") 
require("qmap") 
way.points <-data.frame(lapply(lst[,1:3], as.character), stringsAsFactors=FALSE) 
rte.from <- apply(way.points[-nrow(way.points),2:3],1,paste,collapse=",") 
rte.to <- apply(way.points[-1,2:3],1,paste,collapse=",") 
rte <- do.call(rbind, 
       mapply(route, rte.from, rte.to, SIMPLIFY=FALSE, 
         MoreArgs=list(mode="walking",structure="legs"))) 


map.centre<-c(mean(as.numeric(way.points$X2)),mean(as.numeric(way.points$X1))) 

coords <- rbind(as.matrix(rte[,7:8]),as.matrix(rte[nrow(rte),9:10])) 
coords <- as.data.frame(coords) 

ggm <- qmap(location=map.centre,zoom = 15, maptype = "road", legend="topright") 

ggm + 
geom_path(data=coords,aes(x=startLon,y=startLat),color="blue",size=2)+ 
geom_point(data=way.points,aes(x=as.numeric(X2),y=as.numeric(X1)), 
      size=10,color="yellow")+ 
geom_point(data=way.points,aes(x=as.numeric(X2),y=as.numeric(X1), 
      color = factor(business.names, levels=business.names)), alpha = 0) + 
geom_text(data=way.points, 
      aes(x=as.numeric(X2),y=as.numeric(X1), label=seq_along(X1))) + 
scale_color_discrete(name = "Business names") + 
theme(legend.key = element_rect(fill = NA)) 

} 

create.map(foo) 

enter image description here

+0

Отличный ответ. Я попытался применить его на более простой карте без путей, но не могу выйти за эту ошибку: Ошибка: недопустимая цветовая спецификация «1 Lynch». Проблема в этой строке, я считаю: geom_point (data = talent.loc, aes (x = long, y = lat), color = factor (talent.loc $ lawyer, levels = unique (talent.loc $ lawyer)) , альфа = 0). Как цветовой аргумент принимает уровни факторов как цвет? – lawyeR

+0

@jazzurro Вы должны быть экспертом в 'ggmap'. (+1) – akrun

+0

@lawyeR Спасибо за ваш комментарий. Кажется, что 'colour' остается вне' aes' в вашей строке. Не могли бы вы добавить 'colour' в' aes' и посмотреть, что произойдет? – jazzurro