2016-02-12 58 views
1

考慮下面的示例數據幀進行分組,不同的標籤:情節兩個不同的數據幀,由一個或多個變量圖例

x1=seq(2,7,length.out=13) 
y1a=1.5*x1+4; y2a=1.5*x1+7;y3a=1.5*x1+9; 
X1=rep(x1,3) 
Y1=c(y1a,y2a,y3a) 
groups1=rep(c("A","B","C"),each=13) 
df1=data.frame(groups1,X1,Y1) 

x2=seq(4,10,length=10) 
y1b=3*x2+4; y2b=3*x2+7;y3b=3*x2+9; 
X2=rep(x2,3) 
Y2=c(y1b,y2b,y3b) 
groups2=rep(c("A","B","C"),each=10) 
df2=data.frame(groups2,X2,Y2) 

ggplot2繪製他們,我得到一個自動的傳說,這是偉大的。然而,傳說是兩個dataframes一樣的,這是沒有那麼大:

p <- ggplot() 
p <- p + geom_line(data=df1,aes(x=X1, y=Y1, color = groups1)) + 
    geom_point(data=df2,aes(x=X2, y=Y2, color = groups2)) 

enter image description here

相反,我想傳說爲曲線從df1的到來,和曲線從df2來區分,標記前者爲「Pred」,後者爲「Test」。我怎樣才能做到這一點?請注意,實際的數據幀要大得多,而且非常不同(一個有〜400行×10列,另一個有〜90行×30列),因此將它們合併在一起並不會很簡單。

回答

4

一個簡單的替代方法是使用不同的形狀爲,其可以使用fill點並設置colorNA(由此得到相同的結果作爲默認點):

ggplot() + 
    geom_line(data=df1,aes(x=X1, y=Y1, color = groups1)) + 
    geom_point(data=df2,aes(x=X2, y=Y2, fill = groups2), shape=21, color=NA) + 
    scale_color_discrete("Pred") + 
    scale_fill_discrete("Test") 

其給出:

enter image description here


另一種可能性是使用迪菲對於不同的數據集租金線型:

ggplot() + 
    geom_line(data=df1,aes(x=X1, y=Y1, color = groups1, linetype = "Pred")) + 
    geom_line(data=df2,aes(x=X2, y=Y2, color = groups2, linetype = "Test")) + 
    scale_color_discrete("Groups") + 
    scale_linetype_discrete("Datasets") 

這給:

enter image description here

+0

其實,在真實數據集,兩個'groups'變量具有相同的名稱,而不是比'groups1'和'groups2':我創建測試用例時不夠細心這裏(我認爲這不重要!)。無論如何,即使在這種情況下,你的第二個解決方案似乎也能工作我實際上需要繪製第二個數據集的點。我認爲添加一個'geom_point'圖層就足夠了...... – DeltaIV

+0

哇!解決方案1現在看起來很棒非常感謝 :) – DeltaIV

2

一般來說,ggplot讓一個傳奇的一兩件事。你不能有兩個顏色的傳說。

通過使用交互,您可以爲每個主組和每個子組使用不同的顏色。

df1$group <- 1 
df2$group <- 2 


p <- ggplot() + geom_line(data=df1,aes(x=X1, y=Y1, color = interaction(group,groups1))) + 
    geom_point(data=df2,aes(x=X2, y=Y2, color = interaction(group,groups2))) 
p