Держите в легенде все перерывы в ggplot для карт - PullRequest
2 голосов
/ 29 апреля 2020

Я работаю с картами и стараюсь сохранить в легенде все ключи для перерывов, даже если в этих перерывах не было случаев.

Я использую код из другого вопроса, отредактированный для отображения моей проблемы. Старый вопрос здесь: R Пользовательская цветовая шкала для печати

В этом примере ни один штат | округ не выпадет в перерыв "1001 - 10000" , но мне нужно сохранить этот ключ в легенде. Код ниже:

map with missing break in legend

stateNames <- c("alabama", "alabama", "arizona", "arkansas", "california", 
                "colorado", "connecticut", "florida", "georgia")
countyNames <- c("autauga", "blount", "apache", "bradley", "orange", 
                 "boulder", "new haven", "flagler", "turner")
dataCol <- c(0, 5, 15, 50, 150, 1000, 500, 249, 30)

map.county <- map_data('county')
counties   <- unique(map.county[,5:6])
data_map <- merge(counties, data.frame(region=stateNames, 
                                       subregion=countyNames, 
                                       data1= dataCol),
                  by=c("region","subregion"), all.x=T, all.y=F
)

data_map$data1[which(is.na(data_map$data1))] <- 0


map.county <- data.table(map_data('county'))
setkey(map.county,region,subregion)
data_map <- data.table(data_map)
setkey(data_map,region,subregion)
map.df <- map.county[data_map]

map.df$brks <- cut(map.df$data1, 
                   breaks = c(0, 1, 10, 25, 100, 250, 1000, 10000), 
                   labels = c("0", "1 - 10", "11 - 25", "26 - 100", 
                              "101 - 250", "251 - 1000", "1001 - 10000"),
                   include.lowest = TRUE)

ggplot(map.df, aes(x=long, y=lat, group=group, fill=brks)) + 
  geom_polygon(colour = "grey", size = 0.001) +
  coord_map()  +
  expand_limits(x = map.county$long, y = map.county$lat) +
  scale_fill_brewer(palette = "YlOrRd") +
  theme_void() +
  theme(legend.position = "right")

1 Ответ

0 голосов
/ 29 апреля 2020

Вы можете просто добавить аргумент drop = FALSE в scale_fill_brewer:

ggplot(map.df, aes(x=long, y=lat, group=group, fill=brks)) + 
  geom_polygon(colour = "grey", size = 0.1) +
  coord_map()  +
  expand_limits(x = map.county$long, y = map.county$lat) +
  scale_fill_brewer(palette = "YlOrRd", drop = FALSE) +
  theme_void() +
  theme(legend.position = "right")

enter image description here

Отвечает ли он на ваш вопрос?

...