代码之家  ›  专栏  ›  技术社区  ›  denis

在保持形状替代的同时在两列中中断图例

  •  1
  • denis  · 技术社区  · 5 年前

    我有一个 ggplot 问题。以下是示例数据:

    df <- data.frame(x = rep(1:5,5),
                     type2 = c(rep(letters[1:2],each = 10),rep("c",5)),
                     type1 = rep(LETTERS[1:5],each = 5), 
                     value = unlist(lapply(-2:2,function(a){rnorm(5,mean = a, sd = 1)})))
    
    library(ggplot2)
    
    plotcolor <- c( "#99d8c9","#2ca25f","#cbc9e2","#9e9ac8","#e34a33")
    p <- ggplot(df,aes(x,value,color = type1,fill = type1,shape = type2))+
      geom_point(size = 5)+
      theme_light()+
      labs(title =  "",
           color = "Method",
           fill = "Method",
           shape = "")+
      geom_hline(yintercept = 0)+
      guides(colour = guide_legend(override.aes = list(shape =  c(21,21,24,24,22),
                                                       linetype = c(rep("blank",5)),
                                                       fill = plotcolor,
                                                       color = plotcolor)))+
      scale_shape(guide = FALSE)+
      scale_colour_manual(values = plotcolor)
    p
    

    给出 enter image description here

    现在,出于空间原因,我想将图例拆分为两列。我试过

    p + guides(color=guide_legend(ncol=2))
    

    但它移除了 override 这是我的传奇故事的一部分,只需指出:

    enter image description here

    p + guides(color=guide_legend(ncol=2),
               fill =guide_legend(ncol=2) ,
               shape = guide_legend(ncol=2))
    

    也没用。有人知道如何处理这个问题吗?

    1 回复  |  直到 5 年前
        1
  •  3
  •   Sven Hohenstein    5 年前

    您可以指定 ncol 在现有的 guide_legend (不要多次使用):

      guides(colour = guide_legend(override.aes = list(shape = c(24,24,22,22,21),
                                                       linetype = c(rep("blank",5)),
                                                       fill = plotcolor,
                                                       color = plotcolor),
                                   ncol = 2))+
    

    enter image description here