【问题标题】:Having all layers in the legend with ggplot使用 ggplot 在图例中拥有所有图层
【发布时间】:2026-01-21 14:10:01
【问题描述】:

如何制作一个图例来代表我的图表中绘制的所有曲线?目前,为第一层生成了一个自动图例(基于“颜色”美学),但另一层(表示所有观察中“价格”变量的密度的黑色曲线)未包含在此图例中。

我认为我的问题肯定来自对 ggplot 包的概念的不完全理解。

ggplot(diamonds) + 
  geom_density(aes(x = price, y = ..density.., colour = cut)) +
  geom_density(aes(x = price,y = ..density..))

【问题讨论】:

    标签: r ggplot2 legend


    【解决方案1】:

    ggplot2 中的原则是每种美学都映射到一个比例。因此,如果您想在colour 比例中包含一个图层,您需要将该图层映射到colour

    像这样:

    ggplot(diamonds, aes(x=price)) + 
      geom_density(aes(colour = cut)) +
      geom_density(aes(colour="Overall"), size=1.5)
    


    注意:您可以通过指定手动色标来额外控制颜色:

    ggplot(diamonds, aes(x=price)) + 
      geom_density(aes(colour = cut)) +
      geom_density(aes(colour="Overall"), size=1.5) +
      scale_colour_manual(
        limits=c("Overall", levels(diamonds$cut)),
        values=c("black", 2:6)
        )
    

    【讨论】:

    • 感谢您对我的代码的解释和简化。使用 scale_colour_manual 使“Overall”曲线变黑并在图例中将“Overall”标签作为上部标签时,我仍然遇到一些困难。