2015-06-20 44 views
1

我想創建一個ggplot密度的圖例,將一個組與所有組進行比較。使用此示例 - R: Custom Legend for Multiple Layer ggplot - 我可以使用下面的代碼成功完成此操作。如何通過在ggplot中映射來自不同數據幀的aes_string來生成ggplot中的圖例?

met1 <- data.frame(
    Score = sample(1:10), 
    Group = sample(c("Group1", "Group2", "Group3"), 30, replace = TRUE)) 

ggplot()+geom_density(data=met1, aes(x=Score,fill='black'))+geom_density(data=met1[met1$Group=="Group1",],aes(x=Score,fill='red'))+ scale_fill_identity(name='Groups', guide='legend',labels=c('Group1', 'All Groups')) 

但是,我需要使用aes_string來使用函數來調用ggplot來創建許多圖。當我嘗試使用下面的代碼時,它會產生一個錯誤 - eval中的錯誤(expr,envir,enclos):找不到對象'black'。

x_var <- "Score" 

ggplot()+geom_density(data=met1, aes_string(x=x_var,fill='black'))+ 
    geom_density(data=met1[met1$Group=="Group1",],aes(x=x_var,fill='red'))+ 
    scale_fill_identity(name='Groups', guide='legend',labels=c('Group1', 'All Groups')) 

回答

0

您可以使用shQuote引用字符串並scale_fill_manual到字符串映射到相應的顏色

x_var <- "Score" 

ggplot(met1, aes_string(x_var)) + 
    geom_density(data=met1, aes_string(x=x_var, fill=shQuote("b"))) + 
    geom_density(data=met1[met1$Group=="Group1",], aes_string(x=x_var, fill=shQuote("r")), alpha=0.50) + 
    scale_fill_manual(name='Groups', guide='legend', 
        values=c("b"="black", "r"="red"), 
        labels=c('All Groups', 'Group1')) 
+0

謝謝 - 代碼生成一個陰謀,但沒有傳說。 – user4556428

+0

非常好 - 這正是我需要的。 – user4556428