2017-02-14 24 views
0

我想在多边形地图上创建标签文本图层。 这是从以下两个非常相似的查询:geom_text - 使用ggplot2查找质心并在多边形中添加文本 -

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

请你的榜样[_reproducible_(http://stackoverflow.com/questions/5963269)。 – Axeman

+0

感谢您的链接,将编辑 - 据说,添加一些坐标会很复杂,因为我有很多多边形,因此在我的df中进行了观察。 – Chrisftw

+2

如果你有一个合适的sp对象,'coordinate()'会给你多边形的质心。 –

回答

1

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