Combined line & bar geoms: How to generate proper legend?

前端 未结 2 1313
孤街浪徒
孤街浪徒 2020-12-15 13:52

The legend for d2 looks fine; for d1, I would like to show just the hoizontal line against a white/transparent backgounnd.

df = dat         


        
相关标签:
2条回答
  • 2020-12-15 13:58
    # Bar graph: Notice the placement of fill argument in aes()  
      geom_bar(aes(y=prop.P*100, fill="Seropositive"), stat = "identity",
               position = "dodge", width = 0.5)+
    
    # This line defines the legend for the bar
      scale_fill_manual(name="", values = c("Seropositive"="steelblue3"))+
    
    # Adding errorbar
      geom_errorbar(aes(ymin = ciLow*100, ymax = ciHigh*100), width = 0.2,
                    position = position_dodge(width=0.8))+
    
    # Adding the line to the graph. Used the color argument within aes() to define custom colour
      geom_line(aes(y=mmr1_cov*100, group=1, color="MMR1 Coverage"), size=1)+
    
    # Adding points represent the plotted data
      geom_point(aes(x=age, y=mmr1_cov*100), color="red", size=2)+
    
    # Here adding the legend for the line graph and define the colour
      scale_color_manual(name="", values=c("MMR1 Coverage"="red"))+
    
    # Label the axis
      labs(x="Age (Months)", y="Percentage")+
    
    # Place the legend bottom of the graph
      theme(legend.position = "bottom")
    

    Section of the graph displaying the results

    0 讨论(0)
  • 2020-12-15 14:19

    It is not an elegant solution but at least it gives some result.

    I added aes(fill="d2") in geom_bar() and removed fill="red". Then I added separate scales for line and for bars. Then in theme() I removed grey background from legend entry.

    To ensure that d1 in legend is shown before d2 in scale_colour_manual(" ") there should be extra space between quotes ("longer" name).

    To keep legend keys in one line, legend.box="horizontal" added to theme()

      ggplot(df, aes(Date)) + 
        geom_bar(aes(y = d2,fill="d2"), stat="identity") +
        geom_line(aes(y = d1, group = 1, color = "d1")) +
        scale_colour_manual(" ", values=c("d1" = "blue", "d2" = "red"))+
        scale_fill_manual("",values="red")+
        theme(legend.key=element_blank(),
              legend.title=element_blank(),
              legend.box="horizontal")
    

    enter image description here

    0 讨论(0)
提交回复
热议问题