我如何说服ggplot2为我创造一个传奇?

时间:2011-08-23 05:03:39

标签: r ggplot2

我已经设法让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')

1 个答案:

答案 0 :(得分:5)

Baptiste通过建议使用melt包裹中的reshape2向您指出正确的方向。

要分别控制点的alpha值和平滑度,只需在每个geom中指定所需的alpha值即可。请注意,示例代码中的scale_alpha语句不执行任何操作,因为alpha未映射到任何美学,因此我将其删除。此外,由于您的映射与所有图层相同,因此更容易在ggplot参数中指定,而不是在geom参数中指定:

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