2017-09-09 3 views
0

Je suis sûr que cette question a déjà été posée mais que je n'ai pas trouvé dans la recherche. J'ai deux jeux de données que je projette de créer une carte en utilisant ggplot2. J'ai des problèmes pour faire apparaître la légende comme je le voudrais.Légende libellé dans ggplot2 mappage avec 2 jeux de données

code Exemple:

#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()) 

Il en résulte la carte suivante:

enter image description here

Le problème est que son manque les informations de légende en vert, qui font sens bc je n'ai pas mappé n'importe quoi à l'esthétique. Mais je suis en cours d'exécution dans des problèmes quand je fais:

Ici, je suis d'ajouter color="green" dans aes(lon, lat) pour df2 et 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

Mon problème est que la légende inclut le mot "couleur" dedans et "vert". Idéalement, j'aimerais que le mot «couleur» soit remplacé par le mot «lieux» et que le mot «vert» soit complètement effacé. J'ai essayé la modification suivante:

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

enter image description here

Mais cela a simplement remplacé le mot « vert » pour « lieux ». Je veux que le mot "couleur" soit remplacé par "places" et je ne veux pas d'étiquette suivant le cercle dans la légende. Alors j'ai essayé ce qui suit.

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

Cela me fait un peu de chemin. Comme vous pouvez le voir, "couleur" a été remplacé par "lieux", cependant, "vert" est toujours là.

Essayer scale_color_manual(values = "") me donne l'erreur suivante:

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

Aussi, notez que mes deux ensembles de données de points contiennent différents types de données. Pour un jeu de données reposant sur l'ampleur d'une variable pour déterminer la taille d'un cercle, dans l'autre, je cartographie simplement les emplacements indépendamment de toute autre variable qui détermine la taille. Toute aide est très appréciée.

Répondre

2

Quelque chose comme ça (basé de réponse here) devrait fonctionner:

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

Pour forcer la cartographie esthétique pour les lieux, je l'ai placé à l'intérieur aes() & spécifié le mappage dans scale_color_manual().