geom_text - 使用ggplot2查找质心并在多边形中添加文本 -

时间:2017-02-14 12:17:54

标签: r ggplot2 centroid geom-text

我想在多边形地图上创建标签文本图层。 这是下面两个非常相似的查询:

Labeling center of map polygons in R ggplot

ggplot centered names on a map

我的数据框如下,(为了清晰起见,我将其简化为长整数 - 它们是坐标)

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 个答案:

答案 0 :(得分:2)

Andrie's asnwer on ggplot centered names on a map

根据Andrie在上述链接中的输入,我创建了一个带有aggregate()的新向量,可以解决这个问题 - 尽管使用坐标在多边形内居中文本是有争议的。将调查coordinates()@RomanLuš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())