How can I remove the legend title in ggplot2?

前端 未结 6 512
面向向阳花
面向向阳花 2020-12-13 17:17

I have a question concerning the legend in ggplot2.

Say I have a hypothetical dataset about mean carrot length for two different colours at two farms:



        
相关标签:
6条回答
  • 2020-12-13 17:32

    You can modify the legend title by passing it as the first parameter to a scale. For example:

    ggplot(carrots, aes(y=MeanLength, x=Farm, fill=Type)) + 
      geom_bar(position="dodge") +
      theme(legend.position="top", legend.direction="horizontal") +
      scale_fill_discrete("")
    

    There is also a shortcut for this, i.e. labs(fill="")

    Since your legend is at the top of the chart, you may also wish to modify the legend orientation. You can do this using opts(legend.direction="horizontal").

    enter image description here

    0 讨论(0)
  • 2020-12-13 17:35

    I found that the best option is to use + theme(legend.title = element_blank()) as user "gkcn" noted.

    For me (on 03/26/15) using the previously suggested labs(fill="") and scale_fill_discrete("") remove one title, only to add in another legend, which is not useful.

    0 讨论(0)
  • 2020-12-13 17:37

    You can use labs:

    p + labs(fill="")
    

    plot example

    0 讨论(0)
  • 2020-12-13 17:39

    @pascal 's solution in a comment to set the name argument of a scale function, such as scale_fill_discrete, to NULL, is the best option for me. It allows removing the title together with the blank space that would remain if you used "", while at the same time allowing the user to selectively remove titles, which is not possible with the theme(legend.title = element_blank()) approach.

    Since it is buried in a comment, I am posting it as an answer to potentially increase its visibility, with kudos to @pascal.

    TL;DR (for the copy-pasters):

    scale_fill_discrete(name = NULL)

    0 讨论(0)
  • 2020-12-13 17:46

    You've got two good options already, so here's another using scale_fill_manual(). Note this also lets you specify the colors of the bars easily:

    ggplot(carrots,aes(y=MeanLength,x=Farm,fill=Type)) + 
      geom_bar(position="dodge") +
      opts(legend.position="top") +
      scale_fill_manual(name = "", values = c("Orange" = "orange", "Purple" = "purple"))
    

    If you are using the up-to-date (As of January 2015) version of ggplot2 (version 1.0), then the following should work:

    ggplot(carrots, aes(y = MeanLength, x = Farm, fill = Type)) +
      geom_bar(stat = "identity", position = "dodge") +
      theme(legend.position="top") +
      scale_fill_manual(name = "", values = c("Orange" = "orange", "Purple" = "purple"))
    
    0 讨论(0)
  • 2020-12-13 17:52

    The only way worked for me was using legend.title = theme_blank() and I think it is the most convenient variant in comparison to labs(fill="") and scale_fill_discrete(""), which also could be useful in some cases.

    ggplot(carrots,aes(y=MeanLength,x=Farm,fill=Type)) + 
    geom_bar(position="dodge") +
    opts(
        legend.position="top",
        legend.direction="horizontal",
        legend.title = theme_blank()
    )
    

    P.S. There are more useful options in documentation.

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