geom_text - поиск центроидов и добавление текста в многоугольник с помощью ggplot2 -

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

Надписи центра карты полигоны в R ggplot

ggplot центрированные имена на карте

Мой фрейм данных выглядит следующим образом (я упростил long и lat для ясности - это координаты)

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

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


person Chrisftw    schedule 14.02.2017    source источник
comment
Сделайте свой пример воспроизводимым.   -  person Axeman    schedule 14.02.2017
comment
спасибо за ссылку, отредактирую - при этом будет сложно добавить некоторые координаты, так как у меня много полигонов, отсюда и наблюдения в моем df.   -  person Chrisftw    schedule 14.02.2017
comment
coordinates() даст вам центроиды многоугольников, если у вас есть правильный sp объект.   -  person Roman Luštrik    schedule 14.02.2017


Ответы (1)


ответ Андри о центрированных именах ggplot на карте

Основываясь на вводе Андри в приведенной выше ссылке, я создал новый вектор с 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())
person Chrisftw    schedule 14.02.2017