将来自ggplot2中不同data.frames的数据与意外结果相结合

时间:2012-11-12 14:12:11

标签: r ggplot2

假设我们有以下data.frames:

dt1 <- data.frame(x=1:10,y=rnorm(10),g="a",c=1)
dt2 <- data.frame(x=1:10,y=rnorm(10),g="b",c=2)
dt <- rbind(dt1,dt2)

bb <- data.frame(x=1:4,y=rep(-5,4))

以下作品

qplot(x=x,y=y,data=dt,group=g,colour=c)+geom_line(aes(x=bb$x,y=bb$y),colour="black")

使用data.frame bb中的数据生成额外的黑线。但是

bb <- data.frame(x=1:6,y=rep(-5,6))

相同的绘图代码失败,并且投诉行数不同。我可以合并data.frames,即用NAs扩展bb,但我认为上面的代码是有效的ggplot2代码,尽管不完全是它的精神。所以问题是它失败的原因? (答案可能与以下事实有关:4分为20,而6则不分,但需要更多的背景)

2 个答案:

答案 0 :(得分:2)

对于我的第一个bb定义(ggplot2_0.9.2.1),代码对我不起作用:

Error: Aesthetics must either be length one, or the same length as the dataProblems:bb$x, bb$y

这有效:

p1 <- ggplot(data=dt,aes(x=x,y=y,group=g,colour=factor(c)))+geom_line()
p1 + geom_line(data=bb,aes(group=0,colour=factor(0))) +
      scale_colour_manual(values = c("black","blue","red"))

答案 1 :(得分:1)

您可以指定在不同图层中使用的不同数据集:

qplot(x=x,y=y,data=dt,group=g,colour=c) + 
  geom_line(aes(x=x, y=y, group=NULL, colour=NULL), data=bb, colour="black")

此处,geom_line使用bb而非dt的数据。不是使用qplotgeom规范的混合,而是使用纯ggplot符号:

ggplot(data = dt, aes(x = x, y = y)) +
  geom_point(aes(group = g, colour = c)) +
  geom_line(data=bb, colour="black")