2017-02-14 2 views
0

Je voudrais créer une couche de texte d'étiquette sur une carte de polygone. Ceci est une requête très similaire des deux ci-dessous:geom_text - trouver des centroïdes et ajouter du texte dans un polygone en utilisant ggplot2 -

Labeling center of map polygons in R ggplot

ggplot centered names on a map

Mon dataframe est la suivante, (I simplifié long et de latitude pour plus de clarté - ils sont coordonnées)

id long lat order hole piece group locid location 

0 long1 lat1 1  false 1  0.1  1  TEXT I WANT 
0 long2 lat2 2  false 1  0.1  1  TEXT I WANT 
1 long3 lat3 3  false 1  1.1  2  TEXT I WANT2 
1 long4 lat4 4  false 1  1.1  2  TEXT I WANT2 

Ceci est mon code actuel, il retourne une carte noire - je suppose qu'il y a du texte pour toutes les coordonnées longues et lat. Je me bats pour trouver les centroïdes de chaque polygone afin que je puisse ajouter une couche de texte seulement selon le centre de polygone.

testtext <- ggplot() + 
      geom_polygon(data = df, mapping = aes(x=long, y=lat, group = group, fill=location)) + 
      geom_text(data = df, mapping = aes(x=long, y=lat, group = group, label=location)) + 
      geom_path(color = "white") + 
      scale_fill_hue(l=40) + 
      coord_equal() + 
      theme(legend.position = "none", title = element_blank(), axis.text = element_blank()) 

Un grand merci

+1

S'il vous plaît faire votre exemple [_reproducible_] (http://stackoverflow.com/questions/5963269). – Axeman

+0

merci pour le lien, va éditer - cela étant dit, il sera compliqué d'ajouter quelques coordonnées car j'ai de nombreux polygones, d'où des observations dans ma DF. – Chrisftw

+2

'coordonnées()' vous donnera des centroïdes de polygones si vous avez un objet 'sp' approprié. –

Répondre

1

Andrie's asnwer on ggplot centered names on a map

Basé sur l'entrée de Andrie dans le lien ci-dessus, je créé un nouveau vecteur avec aggregate() qui fait l'affaire - bien que le texte de centrage dans un polygone en utilisant des moyens de coordonnées est discutable. Se penchera sur coordinates() @Roman Luštrik

library(ggplot2) 
centroid <- aggregate(cbind(long,lat) ~ location, data=df, FUN=mean) 
testtext <- ggplot() + 
      geom_polygon(data = df, mapping = aes(x=long, y=lat, group = group, fill=location)) + 
      geom_text(data = centroid, mapping = aes(x=long, y=lat, label=location)) + 
      geom_path(color = "white") + 
      scale_fill_hue(l=40) + 
      coord_equal() + 
      theme(legend.position = "none", title = element_blank(), axis.text = element_blank())