2015-01-01 10 views
5

Ich bin eine Route und Punkte auf ggmap Plotten und ich brauche eine Legende hinzufügen, um die Namen aufzulisten, die die Punkte dhHinzufügen einer Legende/Texttabelle zu einer ggmap mit mehreren Schichten

1 Bill Harris vertreten, 2 Anne Jones etc ..

Ich habe Beispieldaten vorbereitet.

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") 

Hier ist mein Code bis heute. Beachten Sie, dass der Parameter Farbe & für den geom_path und die geom.route außerhalb der AES-Funktion liegt. Ich muss die Größe oder Farbe nicht basierend auf den Daten anpassen. Wenn ich Größe & Farbe in die AES-Funktion platziere, bekomme ich eine Legende, aber das ist nicht was ich will. Es verwendet die Punktdaten und nicht den Geschäftsnamen.

Ich bin nicht einmal sicher, ob die Legende der beste Weg zu gehen ist. Ich brauche nur die Daten, die auf dem Diagramm in einer einfachen Tabelle angezeigt werden.

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

Braucht es auf der Karte zu sein? – hrbrmstr

Antwort

8

Hier ist eine Möglichkeit. Sie können Geschäftsnamen ordnen und geom_point noch einmal verwenden, um eine Legende zu erstellen. In diesem geom_point verwenden Sie alpha = 0. Daher sehen Sie wirklich keine Punkte; Sie sehen nur die gelben Punkte wie in der ersten geom_point angegeben. Hier heißen Ihre Daten 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

Ausgezeichnete Antwort. Ich habe versucht, es auf einer einfacheren Karte ohne Pfade anzuwenden, kann aber nicht über diesen Fehler hinausgehen: Fehler: ungültige Farbangabe "1 Lynch". Das Problem ist in dieser Zeile, glaube ich: geom_point (data = talent.loc, aes (x = lang, y = lat), color = faktor (talent.loc $ anwalt, levels = unique (talent.loc $ anwalt)) , Alpha = 0). Wie akzeptierst du Farbfaktoren die Faktorstufen als Farbe? – lawyeR

+0

@jazzurro Sie müssen ein Experte in 'ggmap' sein. (+1) – akrun

+0

@lawyeR Vielen Dank für Ihren Kommentar. Es scheint, dass "Farbe" außerhalb von "AES" in Ihrer Zeile bleibt. Würden Sie versuchen, 'colour' in' aes' hinzuzufügen und zu sehen, was passiert? – jazzurro

Verwandte Themen