2015-03-10 3 views
4

Я пытаюсь и в настоящее время не могу добавить текстовые аннотации к карте choropleth, которую я создал в ggplot2. Я пытаюсь обозначить каждый из полигонов (район местного самоуправления) своим именем.Как добавить ярлыки на карту choropleth, созданную с помощью ggplot2?

Прежде чем продолжить, я знаю, что подобные вопросы были заданы как на SO, так и подробно описаны в (очень хорошем) уроке here. Однако я пробовал несколько методов безуспешно и думаю, что, возможно, наткнулся на другую проблему. Я подозреваю, что одна из причин отказа моего кода в том, что я пытаюсь аннотировать geom_polygon(), тогда как другие методы, которые я видел, подробно описывают, как аннотировать объект geom_map. Тем не менее, я не могу понять, почему это невозможно с помощью geom_polygon.

Я включил свой код ниже. You can download my data from here. Кадр данных включает мои данные, соединенные с фортифицированным шейп-файлом. Ярлыки, которые я пытаюсь добавить, находятся в столбце «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() 

Если у кого-то есть предложения, я был бы чрезвычайно благодарен, если бы кто-нибудь мог указать, где я иду не так. Заранее спасибо.

В стороне, я признаю, что маркировка choropleths может отвлекать от визуального опыта, но босс запросил их специально!

Here is my plot sans labels

ответ

4

Вы можете добавить ярлыки, как этот

# http://stackoverflow.com/questions/9441778/improve-centering-county-names-ggplot-maps 
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)) 

enter image description here

+0

Эй @lukeA, спасибо очень много для этого. Я чувствую себя глупо за то, что упустил существующий вопрос. Я заметил, что этот метод может создавать несколько меток для каждого полигона? На этот раз мне удалось удалить их вручную, но мне интересно, можно ли его настроить, чтобы каждый раз показывал только один? – vengefulsealion

+0

Добро пожаловать. Хорошая точка BTW - здесь следует использовать 'annotate' вместо' geom_text'. Я редактировал сообщение. – lukeA

Смежные вопросы