2014-02-05 3 views
6

Ich möchte Datenpunkte für verschiedene Städte über eine ausgegraute Karte von Google plotten. Da diese Städte in einiger Entfernung voneinander liegen, dachte ich, ich würde eine facettierte Handlung verwenden.Erstellen Sie ggmap mit Punkten, facettiert und jede Facette entsprechend gezoomt?

Erstellen der Karte ist einfach genug; siehe Bild und Code unten. Allerdings zeigt jede Facette die gleiche Fläche - in diesem Fall Greater London - mit dem Ergebnis, dass die Punkte für andere Städte nicht angezeigt werden.

Idealerweise hätte ich gerne jede Facette, um jede Stadt mit den relevanten Punkten überlagert zu zeigen. So würde die Facette "Cardiff" eine vergrößerte Karte von Cardiff und seinen Datenpunkten zeigen, "Birmingham" würde Birmingham und seine Punkte zeigen und so weiter. Ich habe versucht, verschiedene Parameter wie und center zu ändern, aber ich war nicht erfolgreich.

Wie kann ich eine andere Stadt und die relevanten Punkte in jeder Facette zeigen?

enter image description here

require(ggmap) 
require(reshape) 

# create fake data 
sites <- data.frame(site = 1:6, 
        name = c(
         "Royal Albert Hall", 
         "Tower of London", 
         "Wales Millenium Centre", 
         "Cardiff Bay Barrage", 
         "Birmingham Bullring", 
         "Birmingham New Street Station" 
         ), 
        coords = c(
         "51.501076,-0.177265", 
         "51.508075,-0.07605", 
         "51.465211,-3.163208", 
         "51.44609,-3.166652", 
         "52.477644,-1.894158", 
         "52.477487,-1.898836"), 
        subzone = rep(c('London','Cardiff','Birmingham'), each = 2) 
        ) 

# use function from reshape to split/add column 
sites = transform(sites, 
      new = colsplit(coords, split = ",", names = c('lat', 'lon'))) 
names(sites) <- c(names(sites)[1:4], 'lat','lon') 


ggmap(get_googlemap(center = "London", # omitting this doesn't help 
        scale = 2, 
        zoom = 11, # fiddling with zoom doesn't work 
        color = 'bw', 
        maptype = 'roadmap', 
        extent = 'panel', 
        format = "png8", 
        filename = "facet_map_test", 
        )) + 
    facet_wrap(~ subzone, ncol = 1) + 
    geom_point(data = sites, 
       aes(x = lon, y = lat), 
       fill = "red", 
       size = 3, 
       colour = "black", 
       shape = 21, 
       alpha = 1) + 
    theme(legend.position = "none") + 
    theme() 
+0

Mit Blick auf die 'ggmap()' Code, ich glaube, das ist einfach nicht unterstützt: Alle Facetten der gleichen Karte zu teilen haben. Ziehen Sie in Betracht, drei separate Plots zu erstellen (sogar mit 'facet_wrap', um den Header zu erhalten) und diese auf irgendeine Weise zu kombinieren. – krlmlr

Antwort

6

das gridExtra Paket zu verwenden ist wahrscheinlich der beste Weg zu gehen. Der Code:

# getting the maps 
londonmap <- get_map(location = c(lon = -0.1266575, lat = 51.504575), zoom = 12) 
cardiffmap <- get_map(location = c(lon = -3.16493, lat = 51.45565), zoom = 13) 
birminghammap <- get_map(location = c(lon = -1.896497, lat = 52.477565), zoom = 14) 

# plotting the maps 
p1 <- ggmap(londonmap) + 
    geom_point(data = sites[sites$subzone=="London",], 
      aes(x = lon, y = lat, fill = "red", alpha = 0.8, size = 3), 
      shape = 21) + 
    ggtitle("London") + 
    theme(axis.title = element_blank(), legend.position = "none", plot.margin = unit(c(0,0,0,0), "lines")) 

p2 <- ggmap(cardiffmap) + 
    geom_point(data = sites[sites$subzone=="Cardiff",], 
      aes(x = lon, y = lat, fill = "red", alpha = 0.8, size = 3), 
      shape = 21) + 
    ggtitle("Cardiff") + 
    theme(axis.title = element_blank(), legend.position = "none", plot.margin = unit(c(0,0,0,0), "lines")) 

p3 <- ggmap(birminghammap) + 
    geom_point(data = sites[sites$subzone=="Birmingham",], 
      aes(x = lon, y = lat, fill = "red", alpha = 0.8, size = 3), 
      shape = 21) + 
    ggtitle("Birmingham") + 
    theme(axis.title = element_blank(), legend.position = "none", plot.margin = unit(c(0,0,0,0), "lines")) 

# grouping the plots together in one plot  
grid.arrange(p1,p2,p3,ncol=1) 

Das Ergebnis:

enter image description here

+0

Danke, +1, dass du dir die Zeit dafür genommen hast. Ich bin ein langjähriger Benutzer von 'grid.arrange' und habe bereits eine Lösung für das obige Problem basierend darauf. Im Hinblick auf diese Frage interessiert mich insbesondere, ob eine facettierte Lösung möglich ist oder nicht. – SlowLearner

+0

Ich bin mir ziemlich sicher, dass eine facettierte Lösung nicht möglich ist. Bei der Verwendung von Facetten wird der gleiche Hintergrund für die Facetplots verwendet. In Ihrem Fall bedeutet dies, dass dieselbe Karte als Hintergrund verwendet wird (wie Sie in dem Bild in Ihrer Frage gezeigt haben). Wenn ich mir die Funktionen im Paket 'ggmap' anschaue, kann ich keine Funktion entdecken, die diese spezielle Verwendung von Facetten unterstützt. Es gibt daher meines Erachtens nur eine Situation, in der eine facettenreiche Lösung funktioniert: wenn Sie verschiedene Punktegruppen auf derselben Karte darstellen müssen. – Jaap

Verwandte Themen