2017-02-14 39 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())