2017-09-09 2 views
0

Ich bin sicher, dass diese Frage zuvor gestellt wurde, aber ich konnte es nicht in der Suche finden. Ich habe zwei Datensätze, die ich projiziere, um eine Karte mit ggplot2 zu erstellen. Ich habe Probleme, die Legende so erscheinen zu lassen, wie ich möchte.Legende Etikett in ggplot2 Mapping mit 2 Datensätzen

Beispielcode:

#First dataset 
lat<-as.numeric(c(42.279594, 37.335480, 42.652580, 42.331429, 32.897480, 40.785091)) 
lon<-as.numeric(c(-83.732124, -121.893028,-73.756233, -83.045753, -97.040443, -73.968285)) 
Location<-c("Ann Arbor, MI","San Joke, CA", "Albany, NY", 
    "Detroit, MI", "Dallas, TX","New York, NY") 
Incidents<-as.numeric(c(21, 12, 9, 6, 5, 5)) 
df1<-cbind.data.frame(Location, Incidents, lat, lon) 

#Second dataset 
Location<-c("New York, NY","Los Angeles, CA", "Queens, NY", 
    "Minneapolis, MN", "Austin, TX","Bronx, NY") 
lat<-as.numeric(c(40.71278, 34.05223, 40.72822, 44.97775, 30.26715, 40.84478)) 
lon<-as.numeric(c(-74.00594, -118.24368,-73.79485, -93.26501, -97.74306, -73.86483)) 
df2<-cbind.data.frame(Location, lat, lon) 

#Map 
library(ggplot2) 
states <- map_data("state") 
states <- states[order(states$order), ] 

ggplot() + 
geom_polygon(data=states, aes(long, lat, group=group), 
    size=0.1, fill="black", color="white", alpha=0.75) + 
geom_point(data=df1, aes(lon, lat,size= Incidents), color="red", alpha =0.5) + 
geom_point(data=df2, aes(lon, lat), color="green", alpha =0.5) + 
theme(axis.line=element_blank(), 
    axis.text.x=element_blank(), 
    axis.text.y=element_blank(), 
    axis.ticks=element_blank(), 
    axis.title.x=element_blank(), 
    axis.title.y=element_blank(), 
    legend.position="bottom", 
    panel.background=element_blank(), 
    panel.border=element_blank(), 
    panel.grid.major=element_blank(), 
    panel.grid.minor=element_blank(), 
    plot.background=element_blank()) 

Dies ist in der folgenden Karte Ergebnisse:

enter image description here

Das Problem ist, dass seine die Legende Informationen in Grün fehlt, die Sinn machen bc ich nicht haben der Ästhetik etwas zugeordnet. Aber ich bin in Probleme laufen, wenn ich tun:

Hier bin ich das Hinzufügen color="green" in aes(lon, lat) für df2 und scale_color_manual(values = "green")

ggplot() + 
    geom_polygon(data=states, aes(long, lat, group=group), 
     size=0.1, fill="black", color="white", alpha=0.75) + 
    geom_point(data= df, aes(lon, lat,size= Incidents), color="red", alpha =0.5) + 
    geom_point(data=df2, aes(lon, lat, color="green"), alpha =0.5) + 
    theme(axis.line=element_blank(), 
     axis.text.x=element_blank(), 
     axis.text.y=element_blank(), 
     axis.ticks=element_blank(), 
     axis.title.x=element_blank(), 
     axis.title.y=element_blank(), 
     legend.position="bottom", 
     panel.background=element_blank(), 
     panel.border=element_blank(), 
     panel.grid.major=element_blank(), 
     panel.grid.minor=element_blank(), 
     plot.background=element_blank()) 

enter image description here

Mein Problem dabei ist, dass die Legende das Wort enthält "Farbe" drin und "grün". Idealerweise möchte ich, dass das Wort "Farbe" durch das Wort "Orte" ersetzt wird und dass das Wort "Grün" vollständig gelöscht wird. Ich habe versucht, die folgende Änderung:

scale_color_manual(values = "green", label="places") 

enter image description here

Aber das einfach ersetzt das Wort „grün“ für „Orte“. Ich möchte, dass das Wort "Farbe" durch "Orte" ersetzt wird, und ich möchte nicht, dass ein Etikett dem Kreis in der Legende folgt. Also habe ich folgendes versucht.

places<-c("green","green","green","green","green","green") 
df2<-cbind.data.frame(df2, green) 
    Location  lat lon  places 
1 Ann Arbor, MI 42.27959 -83.73212 green 
2 San Joke, CA 37.33548 -121.89303 green 
3 Albany, NY 42.65258 -73.75623 green 
4 Detroit, MI 42.33143 -83.04575 green 
5 Dallas, TX 32.89748 -97.04044 green 
6 New York, NY 40.78509 -73.96828 green 

ggplot() + 
    geom_polygon(data=states, aes(long, lat, group=group), 
     size=0.1, fill="black", color="white", alpha=0.75) + 
    geom_point(data= df, aes(lon, lat,size= Incidents), color="red", alpha =0.5) + 
    geom_point(data=df2, aes(lon, lat, color=places), alpha =0.5) + 
    theme(axis.line=element_blank(), 
     axis.text.x=element_blank(), 
     axis.text.y=element_blank(), 
     axis.ticks=element_blank(), 
     axis.title.x=element_blank(), 
     axis.title.y=element_blank(), 
     legend.position="bottom", 
     panel.background=element_blank(), 
     panel.border=element_blank(), 
     panel.grid.major=element_blank(), 
     panel.grid.minor=element_blank(), 
     plot.background=element_blank())+ scale_color_manual(values = "green") 

enter image description here

, dass es mich ein wenig an die Quere kommt. Wie Sie sehen können, wurde "Farbe" durch "Orte" ersetzt, aber "Grün" ist immer noch da.

Der Versuch scale_color_manual(values = "") gibt mir die folgende Fehlermeldung:

Error in grDevices::col2rgb(colour, TRUE) : invalid color name '' 

Beachten Sie auch, dass meine zwei Punkt Datensätze verschiedene Arten von Daten enthalten. Bei einem Datensatz, der sich auf die Größe einer Variablen stützt, um die Kreisgröße zu bestimmen, mappele ich bei der anderen einfach Orte, die unabhängig von einer anderen Variablen sind, die die Größe bestimmt. Jede Hilfe wird sehr geschätzt.

Antwort

2

So etwas wie diese (basierend off Antwort here) funktionieren soll:

ggplot() + 
    geom_polygon(data=states, aes(long, lat, group=group), 
       size=0.1, fill="black", color="white", alpha=0.75) + 
    geom_point(data=df1, aes(lon, lat,size= Incidents), color="red", alpha =0.5) + 
    geom_point(data=df2, aes(lon, lat, color="Places"), alpha =0.5) + 
    scale_color_manual(name = "Places", values = c("Places" = "green"), labels = c("")) + 
    theme(axis.line=element_blank(), 
     axis.text.x=element_blank(), 
     axis.text.y=element_blank(), 
     axis.ticks=element_blank(), 
     axis.title.x=element_blank(), 
     axis.title.y=element_blank(), 
     legend.position="bottom", 
     panel.background=element_blank(), 
     panel.border=element_blank(), 
     panel.grid.major=element_blank(), 
     panel.grid.minor=element_blank(), 
     plot.background=element_blank()) 

enter image description here

Damit die Orte ästhetische Zuordnung zu zwingen, legte ich es in aes() & die Zuordnung in scale_color_manual() angegeben.