слой два карты ggplot друг на друга - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть две карты ggplot, каждая из которых использует один и тот же шейп-файл. Один - это данные, а другой - названия каждой страны. В настоящее время они находятся в отдельных ggplots, но как мне добавить имена поверх моего существующего (plot1)?

cnames <- aggregate(cbind(long, lat) ~ region, data=map, 
                    FUN=function(x)mean(range(x)))
names <-ggplot(map, aes(long, lat)) +  
    geom_polygon(aes(x = long, y = lat, group=group), colour='black', fill=NA) +
    geom_text(data=cnames, aes(long, lat, label = region), size=2) +
    coord_map()

plot1 <- ggplot(map, aes(x=long,y = lat, group = group, fill = map$`data`)) + geom_polygon(colour="black") + coord_map("polyconic") + labs(fill = "data") + theme(axis.title.x=element_blank(),axis.text.x=element_blank(),
        axis.ticks.x=element_blank(),axis.title.y=element_blank(),axis.text.y=element_blank(),axis.ticks.y=element_blank())
  plot1 <- plot1 + ggtitle("data")
  plot1 <- plot1 + scale_fill_gradient2(low = muted("grey"), high = muted("deepskyblue4"))

1 Ответ

1 голос
/ 14 февраля 2020

Полагаю, вы можете просто добавить слои вместе, например так:

invisible(lapply(c("ggplot2", "scales", "mapproj"), require, character.only = TRUE))
#> Loading required package: ggplot2
#> Loading required package: scales
#> Loading required package: mapproj
#> Loading required package: maps
map <- map_data("state")

cnames <- aggregate(cbind(long, lat) ~ region, data=map, 
    FUN=function(x)mean(range(x)))

    ggplot(map, aes(
        x = long,
        y = lat,
        group = group,
        fill = as.numeric(factor(map$region))
    )) + 
    scale_fill_gradient2(low = muted("grey"), high = muted("deepskyblue4"))+
    geom_polygon(colour = "black") +
    geom_text(data=cnames, aes(long, lat, label = region), size=2, inherit.aes = FALSE) +
    coord_map("polyconic") + 
    labs(fill = "region") + 
    theme(
        axis.title.x = element_blank(),
        axis.text.x = element_blank(),
        axis.ticks.x = element_blank(),
        axis.title.y = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank()
    ) + 
    ggtitle("data")

...