2015-09-10 47 views
1

我剛剛使用ggplot繪製來自不同數據框的數據。不知何故,我無法看到(手動)圖例。手動圖例(scale_colour_manual)缺少繪圖與幾種美學效果

下面的代碼示例是該問題的一個很好的總結。什麼是錯誤?

library(plyr) 
library(ggplot2) 

df <- data.frame(gp=factor(rep(letters[1:3], each=10)), y=rnorm(30)) 

ds <- ddply(df, .(gp), summarise, mean=mean(y), sd=sd(y)) 

ggplot() + 
    geom_point(data=df, aes(colour='one', x=gp, y=y), colour='red') + 
    geom_point(data=ds, aes(colour='two', x=gp, y=mean), colour='green') + 
    geom_errorbar(data=ds, aes(colour='three', x=gp, y=mean, ymin=mean-sd, ymax=mean+sd), colour='blue') + 
    scale_color_manual('', values=c('red', 'green', 'blue')) 

請不要建議我將數據合併到一個數據框中,然後用一個新變量對它進行分組。我知道這可能是一種選擇,但由於理由不在這個問題的範圍之內,因此在我的特殊情況下實際上是不可能的。

回答

2

你幾乎在那裏。 aes中的顏色變量需要映射到實際顏色,aes之外的顏色是不確定的。

ggplot() + 
    geom_point(data=df, aes(colour='one', x=gp, y=y)) + 
    geom_point(data=ds, aes(colour='two', x=gp, y=mean))+ 
    geom_errorbar(data=ds, aes(colour='three', x=gp, y=mean, ymin=mean-sd, ymax=mean+sd))+ 
    scale_color_manual(values=c(one='red', two='green', three='blue'), 
        breaks=c("one","two","three")) 

enter image description here