2017-02-14 2 views
0

Я хотел бы создать текстовый слой метки на карте многоугольника. Это очень похоже запрос из двух ниже:geom_text - поиск центроидов и добавление текста в многоугольник с использованием ggplot2 -

Labeling center of map polygons in R ggplot

ggplot centered names on a map

Мой dataframe выглядит следующим образом, (я упрощена долго и лат для ясности - они являются координатами)

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 

Это мой текущий код, он возвращает черную карту - я предполагаю, что есть текст для каждой длинной и лат-координаты. Я изо всех сил пытаюсь найти центроиды каждого многоугольника, чтобы добавить текстовый слой только в соответствии с центром полигона.

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

Большое спасибо

+1

Пожалуйста, сделайте ваш пример [_reproducible_] (http://stackoverflow.com/questions/5963269). – Axeman

+0

спасибо за ссылку, отредактируйте - если будет сказано, будет сложно добавить некоторые координаты, так как у меня много полигонов, поэтому наблюдения в моем df. – Chrisftw

+2

'координат()' даст вам центроиды полигонов, если у вас есть правильный 'sp' объект. –

ответ

1

Andrie's asnwer on ggplot centered names on a map

на основе входных данных Andrie в ссылке выше, я создал новый вектор с aggregate(), что делает трюк - хотя центрирование текста внутри многоугольника, используя средства из координат спорно. Будет выглядеть в 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()) 
Смежные вопросы