2012-06-25 75 views
2

我希望每次向主圖中添加另一個geom_line()時都會獲得不同的顏色梯度,每次使用'color'作爲比例。 這裏是一個數據幀只作爲一個例子:使用ggplot2的低級別圖進行多種顏色縮放

df <- data.frame("letter"=c(rep("a",5),rep("b",5)),"x"=rep(seq(1,5),2),"y1"=c(seq(6,10),seq(6,10)/2),"y2"=c(seq(1,5),seq(1,5)/2),"y3"=c(seq(3,7),seq(3,7)/2)) 

對於我第一曲線:

y1 <- ggplot(df,aes(x=x,y=y1,colour=letter))+geom_line() 
y1 

然後我想補充y1和y2,我可以做如下:

y2 <- geom_line(data=df,aes(x=x,y=y2,colour=letter)) 
y3 <- geom_line(data=df,aes(x=x,y=y3,colour=letter)) 
y1+y2+y3 

但我想顏色漸變(或色調)是不同的y1,y2和y3!

是否有可能爲scale_colour_hue()分配類似於每個geom_line的東西,還是隻有ggplot纔可以?

謝謝!

+2

一句話,不,你不能。您可以將數據融化,並(a)將顏色映射到區分所有六條線的單個變量,或者(b)使用線型或刻面來區分三對線。 – joran

+0

謝謝,喬蘭,太棒了! – user1480445

+0

@joran,爲什麼不作爲答案提交(不是你需要代表)? –

回答

2

正如我上文所述,這裏有一些選擇:

df <- data.frame("letter"=c(rep("a",5),rep("b",5)), 
       "x"=rep(seq(1,5),2), 
       "y1"=c(seq(6,10),seq(6,10)/2), 
       "y2"=c(seq(1,5),seq(1,5)/2), 
       "y3"=c(seq(3,7),seq(3,7)/2)) 

# melt your data and create a grouping variable 
library(plyr)      
df_m <- melt(df,id.vars = 1:2) 
df_m$grp <- with(df_m,interaction(letter,variable)) 


# Option 1 
ggplot(df_m,aes(x = x, y = value)) + 
    facet_wrap(~variable) + 
    geom_line(aes(group = letter,colour = letter)) 

enter image description here

# Option 2  
ggplot(df_m,aes(x = x, y = value)) + 
    geom_line(aes(group = grp,colour = letter,linetype = variable)) 

enter image description here