Улучшение центрирования названий округов ggplot & maps

Раньше я разместил вопрос о нанесении названий округов на карту с использованием ggplot и найденных карт ЗДЕСЬ . Мой первый подход заключался в том, чтобы использовать средние значения всех широт и долгих координат для округа, как показано здесь: enter image description here

К счастью, у Андри было 2 предложения по улучшению центрирования, используя центр диапазонов, а затем функцию corre_map () {которая, кажется, поддерживает правильное соотношение сторон}. Это значительно улучшило центрирование, как показано здесь: enter image description here

Я думаю, это выглядит лучше, но все же есть некоторые трудности с проблемами перекрытия. Я надеюсь еще больше улучшить центрирование (в той же теме Джастин предложил подход kmeans). Я могу вращать текст, если это необходимо, но я надеюсь, что имена будут центрированы и при необходимости повернуты (они выходят за границы округа), чтобы лучше всего отображать названия округов на карте.

Есть идеи?

library(ggplot2); library(maps)

county_df <- map_data('county')  #mappings of counties by state
ny <- subset(county_df, region=="new york")   #subset just for NYS
ny$county <- ny$subregion
p <- ggplot(ny, aes(long, lat, group=group)) +  geom_polygon(colour='black', fill=NA)

#my first approach to centering
cnames <- aggregate(cbind(long, lat) ~ subregion, data=ny, FUN=mean)
ggplot(ny, aes(long, lat)) +  
    geom_polygon(aes(group=group), colour='black', fill=NA) +
    geom_text(data=cnames, aes(long, lat, label = subregion), size=3)

#Andrie's much improved approach to centering
cnames <- aggregate(cbind(long, lat) ~ subregion, data=ny, 
                    FUN=function(x)mean(range(x)))
ggplot(ny, aes(long, lat)) +  
    geom_polygon(aes(group=group), colour='black', fill=NA) +
    geom_text(data=cnames, aes(long, lat, label = subregion), size=3) +
    coord_map()

14
задан Community 23 May 2017 в 12:02
поделиться