代码之家  ›  专栏  ›  技术社区  ›  M.Teich

合并不同地理图层的图例

  •  0
  • M.Teich  · 技术社区  · 7 年前

    我正在绘制地图上两个单独图层的点数据,并希望在一个图例中显示两个图层的信息。

    下面是一些代码来说明这个问题:

    set.seed(42)  
    lat1 <- rnorm(10, 54, 12)
    long1 <- rnorm(10, 44, 12)
    val1 <- rnorm(10, 10, 3)
    lat2 <- rnorm(10, 54, 12)
    long2 <- rnorm(10, 44, 12)
    val2 <- rnorm(10, 10, 3)
    
    df1 <- as.data.frame(cbind(long1, lat1, val1))
    df2 <- as.data.frame(cbind(long2, lat2, val2))
    
    library(ggplot2)
    library(scales)
    
    f <- ggplot() +
         geom_point(data=df1, aes(x=lat1, y=long1, size=val1, fill=val1), shape=21, alpha=0.6) +
         scale_size_continuous(range = c(2, 12), breaks=pretty_breaks(4)) +
         scale_fill_distiller(direction = -1, palette="RdYlBu", breaks=pretty_breaks(4)) +     
         guides(fill = guide_legend(), size = guide_legend()) +
         theme_minimal()
    p <- f + geom_point(data=df2, aes(x=lat2, y=long2, color="val2"), shape=17, size=3) +
         scale_color_manual(values="black",name="")
    p
    

    我能管理的最好方法是创建两个单独的图例,然后删除其中一个图例标题。理想情况下,填充的圆和黑色菱形都是同一个名为“value”的图例的一部分,而黑色菱形的读数为“na”。非常感谢您的帮助!

    1 回复  |  直到 7 年前
        1
  •  2
  •   pogibas    7 年前

    我们必须绘制两个不同的图例,但要将它们彼此靠近(使用 legend.spacing.y中的负值 requires ggplot2_3.0.0)。这种方法产生了另一个问题-两个图例不对齐,因此我们必须绘制另一组钻石(较大的钻石与非钻石匹配,但不可见 alpha=0 )。

    ggplot()。+
    几何点(数据=df1,
    aes(lat1、long1、size=val1、fill=val1)
    形状=21,α=0.6)+
    几何点(数据=df2,
    aes(lat2,long2,color=“val2”),
    形状=17,尺寸=3)+
    几何点(数据=df2,
    aes(lat2,long2,color=“val2”),
    形状=17,尺寸=11.5,α=0)+
    缩放\大小\连续(范围=C(2,12),中断=漂亮中断(4))。+
    比例填充蒸馏器(方向=-1,palete=“rdylbu”,breaks=pretty_breaks(4))。+
    缩放\u颜色\u手动(values=“black”,name=“value\n”)。+
    实验室(填充=空,
    大小=空)+
    参考线(fill=guide_legend(),
    尺寸=导向槽图例(),
    颜色=参考线图例(顺序=1))。+
    主题_minimal()。+
    主题(legend.spacing.y=单位(-0.4,“cm”))
    

    这种方法产生了另一个问题-两个传说不一致,因此我们必须绘制另一组钻石(较大的钻石匹配非钻石,但不可见alpha = 0)

    ggplot() +
        geom_point(data = df1, 
                   aes(lat1, long1, size = val1, fill = val1), 
                   shape = 21, alpha = 0.6) +
        geom_point(data = df2, 
                   aes(lat2, long2, color = "val2"), 
                   shape = 17, size = 3) +
        geom_point(data = df2, 
                   aes(lat2, long2, color = "val2"), 
                   shape = 17, size = 11.5, alpha = 0) +
        scale_size_continuous(range = c(2, 12), breaks = pretty_breaks(4)) +
        scale_fill_distiller(direction = -1, palette = "RdYlBu", breaks = pretty_breaks(4)) +     
        scale_color_manual(values = "black", name = "Value\n") +
        labs(fill = NULL,
             size = NULL) +
        guides(fill = guide_legend(), 
               size = guide_legend(),
               color = guide_legend(order = 1)) +
       theme_minimal() +
       theme(legend.spacing.y = unit(-0.4, "cm"))
    

    enter image description here

    推荐文章