2017-01-23 1 views
1

J'ai une trame de données comme celui-ciComment créer des étiquettes uniques pour plusieurs lignes dans geom_text?

zip state users longitude latitude 
00501 NY 1000 -72.63708 40.92233 
00544 NY 1000 -72.63708 40.92233 
00601 PR 2000 -66.74947 18.1801 
00602 PR 2000 -67.18024 18.36329 

Je comploter nombre d'utilisateurs en utilisant ggmap et geom_point.

map<-get_map(location='united states', zoom=4, maptype = "terrain", 
     source='google',color='color') 
ggmap(map) + geom_point(
aes(x=longitude, y=latitude, show_guide = TRUE, colour=users), 
data=data, alpha=.5, na.rm = T) + 
scale_color_gradient(low="red", high="green") 

L'intrigue se révèle être comme celui-ci enter image description here

Maintenant, je suis en train de créer des étiquettes pour tous les états en utilisant geom_text.

map<-get_map(location='united states', zoom=4, maptype = "terrain", 
     source='google',color='color') 
ggmap(map) + geom_point(
aes(x=longitude, y=latitude, show_guide = TRUE, colour=users), 
data=data, alpha=.5, na.rm = T) + 
scale_color_gradient(low="red", high="green") + 
geom_text(aes(x = longitude, y = latitude, label = as.character(state)), 
data = data,inherit.aes = FALSE) 

L'intrigue se révèle être comme ceci. enter image description here

Les étiquettes sont créées pour chaque ligne. Comment créer une étiquette unique pour plusieurs lignes?

Éditer: Une façon de procéder consiste à supprimer les noms d'état en double des données elles-mêmes. Y a-t-il un moyen plus efficace?

Répondre

2

La solution la plus simple est de regrouper vos données dans un nouveau dataframe premier:

agg.data <- aggregate(cbind(longitude,latitude) ~ state, data = data, mean) 

puis utiliser les données agrégées pour inclure les étiquettes de texte:

ggmap(map) + 
    geom_point(data = data, 
      aes(x = longitude, y = latitude, show_guide = TRUE, colour=users), 
      alpha = 0.5, na.rm = T) + 
    scale_color_gradient(low = "red", high = "green") + 
    geom_text(data = agg.data, 
      aes(x = longitude, y = latitude, label = as.character(state)))