2012-11-12 47 views
0

假设我们有以下data.frames:结合来自不同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") 

生产与数据数据的其他黑线。框架bb。但与

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

相同的绘图代码失败,抱怨行数不同。我可以合并data.frames,即将bb扩展为NAs,但我认为上面的代码是有效的ggplot2代码,虽然不完全符合它的精神。所以问题是为什么它失败了? (答案可能与以下事实有关:4分20,6不分,但更多的上下文是可取的)

回答

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") 
+0

提供不同的数据集不起作用。这里的关键是为新的数据集提供组和颜色的NULL值。奇怪的是,纯ggplot按预期工作,但qplot没有。 – mpiktas

+0

这并不奇怪,'ggplot'调用只定义了'x'和'y'美学(这成为了图的默认设置)。 – mnel

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")) 
+0

谢谢,这里的关键是供给组和颜色值。两个答案都很有帮助,对不起我不得不选择一个。 – mpiktas

+0

我很抱歉,但我没有跟随这个讨论。该错误表示美学(aes)“必须是长度为1或者与数据长度相同”。什么数据需要与其他数据的长度相同?什么是组和颜色值做到这一点?或者是错误信息误导? –