independently move 2 legends ggplot2 on a map

后端 未结 4 1426
庸人自扰
庸人自扰 2020-12-17 05:13

I want to independently move two legends on a map to save save and make the presentation nicer.

Here is the data:

##              INST..SUB.TYPE.DESC         


        
4条回答
  •  执笔经年
    2020-12-17 05:49

    BTW, it is possible to use more than one annotation_custom:

    library(ggplot2); library(maps); library(grid); library(gridExtra); library(gtable)
        ny <- subset(map_data("county"), region %in% c("new york"))
        ny$region <- ny$subregion
    
        p3 <- ggplot(dat2, aes(x = lng, y = lat)) + 
            geom_polygon(data=ny, aes(x = long, y = lat, group = group)) 
    
        # Get the colour legend
        (e1 <- p3 + geom_point(aes(colour = INST..SUB.TYPE.DESCRIPTION, 
            size = Enrollment), alpha = .3) +
            geom_point() + theme_gray(9) +
            guides(size = FALSE, colour = guide_legend(title = NULL, 
                override.aes = list(alpha = 1, size = 3))) +
            theme(legend.key.size = unit(.35, "cm"),
                legend.key = element_blank(),
                legend.background = element_blank()))
    
        leg1 <- gtable_filter(ggplot_gtable(ggplot_build(e1)), "guide-box") 
    
        # Get the size legend
        (e2 <- p3 + geom_point(aes(colour=INST..SUB.TYPE.DESCRIPTION, 
            size = Enrollment), alpha = .3) +
            geom_point() + theme_gray(9) +
            guides(colour = FALSE) +
            theme(legend.key = element_blank(),
                legend.background = element_blank()))
    
        leg2 <- gtable_filter(ggplot_gtable(ggplot_build(e2)), "guide-box") 
    
        # Get first base plot - the map
        (e3 <- p3 + geom_point(aes(colour = INST..SUB.TYPE.DESCRIPTION, 
            size = Enrollment), alpha = .3) +
            geom_point() + 
            guides(colour = FALSE, size = FALSE))
    
    
    leg2Grob <- grobTree(leg2)
    leg3Grob <- grobTree(leg2)
    leg4Grob <- grobTree(leg2)
    leg5Grob <- grobTree(leg2)
    leg1Grob <- grobTree(leg1)
    
    p = e3 +
      annotation_custom(leg2Grob, xmin=-73.5, xmax=Inf, ymin=41, ymax=43) +
      annotation_custom(leg1Grob, xmin=-Inf, xmax=-76.5, ymin=43.5, ymax=Inf) +
      annotation_custom(leg3Grob, xmin = -Inf, xmax = -79, ymin = -Inf, ymax =  41.5) +
      annotation_custom(leg4Grob, xmin = -78, xmax = -76, ymin = 40.5, ymax = 42) +
      annotation_custom(leg5Grob, xmin=-73.5, xmax=-72, ymin=43.5, ymax=Inf)
    p
    

    enter image description here

提交回复
热议问题