【问题标题】:How can I add a legend to my ggplot? Im using geom_line and geom_ribbon如何在我的 ggplot 中添加图例?我正在使用 geom_line 和 geom_ribbon
【发布时间】:2018-05-29 13:26:48
【问题描述】:

下午好,

我使用下面的代码来生成一个绘图:

ggplot() +
 geom_line(data = disDataHeadItems, aes(x=disDataHeadItems$x, 
 y=disDataHeadItems$Freq)) + 
 geom_line(data = disDataLongTail, aes(x=disDataLongTail$x, 
 y=disDataLongTail$Freq)) +
 xlab("Item id") +
 ylab("# of occurrences") +
 scale_x_continuous(breaks=seq(5, 75, 10), expand = c(0, 0)) + 
 scale_y_continuous(expand = c(0, 0)) +
 geom_ribbon(aes(ymin=0, ymax=disDataHeadItems$Freq, 
 x=disDataHeadItems$x), fill="#CC6666") +
 geom_ribbon(aes(ymin=0, ymax=disDataLongTail$Freq, 
 x=disDataLongTail$x), fill="#66CC99") +
 geom_vline(xintercept=19, linetype="dotted")

这创建了以下情节,我对此非常满意:)

现在我想添加一个图例,它只是表示红色部分是顶部项目,绿色部分是数据的长尾。当我查找它时,我只找到指示如何更改图例的答案。但我的只是没有出现。欢迎任何帮助:)

【问题讨论】:

  • 您指定的任何颜色 outside 您对 aes 的调用都不会出现在图例中。建议阅读一些 ggplot 教程来澄清。您需要将颜色放在 aes 括号内才能显示在图例中。
  • 另外,当提到data= 时,在调用列时不需要引用数据框,例如; geom_line(data = disDataHeadItems, aes(x=disDataHeadItems$x, y=disDataHeadItems$Freq)) 将是 geom_line(data=disDataHeadItems, aes(x=x, y=Freq))
  • 啊,谢谢你,似乎修复了它,现在我可以改变现有的传说了!
  • 您可以做一些事情来简化事情:一是geom_ribbon(ymin = 0, ...) 等同于geom_area。另一个是,这将受益于重塑数据以避免多次调用同一个几何图形。您可以发布数据样本吗?

标签: r ggplot2


【解决方案1】:

将 cmets 放在一起并添加一些随机数据框会导致:

library(ggplot2)
disDataHeadItems <- data.frame(
  x = runif(100,1,100),
  Freq = runif(100,5,10)
)
disDataLongTail <- data.frame(
  x = runif(100,1,100),
  Freq = runif(100,5,10)
)

ggplot() +
  geom_line(data = disDataHeadItems, aes(x=x, 
                                         y=Freq)) + 
  geom_line(data = disDataLongTail, aes(x=x, 
                                        y=Freq)) +
  xlab("Item id") +
  ylab("# of occurrences") +
  scale_x_continuous(breaks=seq(5, 75, 10), expand = c(0, 0)) + 
  scale_y_continuous(expand = c(0, 0)) +
  geom_ribbon(aes(ymin=0, ymax=disDataHeadItems$Freq, 
                  x=disDataHeadItems$x, fill="#CC6666")) +
  geom_ribbon(aes(ymin=0, ymax=disDataLongTail$Freq, 
                  x=disDataLongTail$x, fill="#66CC99")) +
  geom_vline(xintercept=19, linetype="dotted")

【讨论】:

    猜你喜欢
    • 2021-07-29
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多