如何向使用 ggplot2 创建的等值线图添加标签?

How can I add labels to a choropleth map created using ggplot2?

我正在尝试向我在 ggplot2 中创建的等值线图添加文本注释,但目前失败了。我正在寻求用其名称标记每个多边形(地方政府区域)。

在我继续之前,我知道有人在 SO 上提出了类似的问题,并且在(非常好的)教程中有详细说明 here。但是,我尝试了几种方法均未成功,并且认为我可能偶然发现了一个不同的问题。我怀疑我的代码失败的原因之一是我试图注释 geom_polygon() 而我看到的其他方法详细说明了如何注释 geom_map 对象。也就是说,我想不通为什么 geom_polygon.

不可能做到这一点

我在下面包含了我的代码。 You can download my data from here。数据框包括我连接到强化 shapefile 的数据。我试图附加的标签位于“LGA_NAME11”列中。

## LOAD PACKAGES
require(ggplot2)
require(rgdal)
require(dplyr)

## SET GGPLOT THEME
theme_clean <- function(base_size = 12) {
    require(grid)
    theme_grey(base_size) %+replace%
            theme(
                    axis.title = element_blank(),
                    axis.text = element_blank(),
                    panel.background = element_blank(),
                    panel.grid = element_blank(),
                    axis.ticks.length = unit(0,"cm"), 
                    axis.ticks.margin = unit(0,"cm"),
                    panel.margin = unit(0,"lines"),
                    plot.margin = unit(c(0, 0, 0, 0), "lines"),
                    complete = TRUE
            )}

## SET COLOUR PALETTES
palette1 <- c("#f2f0f7", "#dadaeb", "#bcbddc", "#9e9ac8", "#756bb1", "#54278f")

## SET LABEL NAMES
lgaNamesSydney <- aggregate(cbind(long, lat) ~ LGA_NAME11, data=sydneyMapData, FUN = function(x) mean(range(x)))
lgaNamesSydney <- lgaNamesSydney %>% rename(lga = LGA_NAME11)
lgaNamesSydney$angle <- 0

## ATTEMPT TO PLOT MAP WITH LABELS
ggplot(sydneyMapData) +
    aes(long, lat, group=group, fill=Factor1) +
    geom_polygon() +
    geom_text(data=lgaNamesSydney, aes(long, lat, label = LGA_NAME11, angle=angle, map_id =NULL), size=2.5) +
    scale_fill_manual(values = palette1) +
    labs(fill="Drop Bears \nper 1000 population") +
    coord_map(projection = "mercator") +
    theme_clean()

如果有人有任何建议,如果有人能指出我哪里出错了,我将不胜感激。提前致谢。

顺便说一句,我知道标记等值线会影响视觉体验,但老板特别要求!

您可以像这样添加标签

# 
centroids <- setNames(do.call("rbind.data.frame", by(sydneyMapData, sydneyMapData$group, function(x) {Polygon(x[c('long', 'lat')])@labpt})), c('long', 'lat')) 
centroids$label <- sydneyMapData$LGA_NAME11[match(rownames(centroids), sydneyMapData$group)]

ggplot(sydneyMapData, aes(long, lat, group=group, fill=Factor1)) +
  geom_polygon(colour = "white") +
  with(centroids, annotate(geom="text", x = long, y=lat, label = label, size = 2.5))