如何让ggplot2为我创建一个图例?

4

我成功使用ggplot2从数据集中创建了几乎我想要的图形,但是我不知道如何标记我的点。

假设数据看起来像这样:

sample <- data.frame(rowid=seq(100), a=runif(100), b=runif(100, .5, 1.5))

我可以创建一个比较这两个事物的图表,就像这样(由于我的真实标签更好,所以看起来不那么有趣,但这是很好的近似):
ggplot(data=sample) + 
      geom_point(aes(rowid, a), color="#990000", alpha=0.4) +
      geom_smooth(aes(rowid, a), color='#990000') +
      geom_point(aes(rowid, b), color='#000099', alpha=0.4) +
      geom_smooth(aes(rowid, b), color='#000099') +
      labs(x='Trial', y='Time')

我该如何显示红色和蓝色的图例?

编辑

感谢baptiste的评论,现在我有以下内容:

wide = melt(sample, id="rowid")

ggplot(data=wide) + 
      geom_point(aes(rowid, value, color=variable), alpha=0.1) +
      scale_alpha(0.3) +
      scale_colour_manual(name="Variables", values=c("b"="#990000", "a"="#000099")) +
      geom_smooth(aes(rowid, value, color=variable)) +
      labs(x='Trials', y='Time')

3
将长格式数据框(例如melt(sample, id="rowid"))用于工作的想法。然后,您可以执行aes(rowid, value, colour=variable) - baptiste
你非常好地回答了我的问题,但我不能将你标记为获胜者。 :) 尽管对于我来说,独立控制点和线的颜色和透明度似乎有点困难。 - Dustin
说服总是关于“正确的论据”哈哈 - João Daniel
1个回答

5
Baptiste建议使用reshape2包中的melt,指出了正确的方向。
为了分别控制点和平滑线的透明度,请在每个geom中指定所需的透明度。请注意,由于alpha未映射到任何美学元素,因此您示例代码中的scale_alpha语句不起作用,因此我将其删除。此外,由于您的映射对所有图层都相同,因此在ggplot参数中指定更容易些。
sample <- data.frame(rowid=seq(100), a=runif(100), b=runif(100, .5, 1.5))
wide = melt(sample, id="rowid")

ggplot(data=wide, aes(x=rowid, y=value, color=variable)) + 
    geom_point(alpha=0.1) +
    scale_colour_manual(name="Variables", values=c("b"="#990000", "a"="#000099")) +
    geom_smooth(alpha=0.8) +
    labs(x='Trials', y='Time')

enter image description here


谢谢。你解决了我剩下的问题并给了我一些非常需要的提示。 - Dustin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接