2012-11-12 71 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或者與數據長度相同」。什麼數據需要與其他數據的長度相同?什麼是組和顏色值做到這一點?或者是錯誤信息誤導? –