21

基本上,我想使用 ggplot 在 R 中创建下面显示的第一个图,但两个对象都在同一个图上(没有小平面包装)。

考虑一个模仿我的数据结构的最小示例:

library(reshape2)
library(ggplot2)
x <- seq(1, 5, length = 100)
y <- replicate(10, sin(2 * pi * x) + rnorm(100, 0, 0.3), "list")
z <- replicate(10, sin(2 * pi * x) + rnorm(100, 5, 0.3), "list")
y <- melt(y)
z <- melt(z)
df <- data.frame(x = y$Var1, rep = y$Var2, y = y$value, z = z$value)
dat <- melt(df, id = c("x", "rep"))

我可以用它来绘制它

ggplot(dat) + geom_line(aes(x, value, group = rep, color = variable), 
    alpha = 0.3) + facet_wrap(~variable)

并得到


(来源:carlboettiger.info

但是,如果我尝试删除构面包装,我认为它应该按颜色和变量分组,但数据没有正确分解,导致胡说八道:


(来源:carlboettiger.info

4

2 回答 2

34

问题在于美学group超越了标准分组协议 - 它不包括在.?group

所以,要让你的情节在没有分面的情况下工作,你需要手动指定交互

ggplot(dat) + geom_line(aes(x, value, group = interaction(rep,variable), color = variable), alpha = 0.3) 

在此处输入图像描述

要覆盖美学中的 alpha 值,请使用guide_legend(override.aes = ...)). 可以在以下链接中找到此信息?guides,特别是?guide_legend

例如

ggplot(dat) + geom_line(aes(x, value, group = interaction(rep,variable), color = variable), 
                           alpha = 0.3) + 
  scale_colour_discrete(guide = guide_legend(override.aes = list(alpha = 1)))

在此处输入图像描述

于 2012-12-18T23:03:49.997 回答
3

您可以粘贴 rep 和变量组:

ggplot(dat) + geom_line(aes(x, value, group = paste(variable, rep), color = variable), 
                    alpha = 0.3) 
于 2012-12-18T23:06:49.600 回答