2015-07-02 70 views
1

這裏是我的數據進行傳真:手動添加的圖例不能在ggplot2中工作?

d1 <- data.frame(
    e=rnorm(3000,10,10) 
) 
d2 <- data.frame(
    e=rnorm(2000,30,30) 
) 

所以,我周圍做這個陰謀從同一圖中,兩個非常不同的數據集兩種不同密度分佈的問題有:

ggplot() + 
    geom_density(aes(x=e),fill="red",data=d1) + 
    geom_density(aes(x=e),fill="blue",data=d2) 

但是,當我嘗試手動添加圖例,如下所示:

ggplot() + 
    geom_density(aes(x=e),fill="red",data=d1) + 
    geom_density(aes(x=e),fill="blue",data=d2) + 
    scale_fill_manual(name="Data", values = c("XXXXX" = "red","YYYYY" = "blue")) 

沒有任何反應。有人知道發生了什麼問題嗎?我認爲如果需要的話,我實際上可以手動添加傳說。

回答

1

通常ggplot在您的數據爲單個data.frame格式和長格式時效果最佳。在你的情況下,我們因此想合併來自data.frame的數據。對於這個簡單的示例,我們只是將數據連接到名爲d的長變量,並使用附加列id來指示該值屬於哪個數據集。

d.f <- data.frame(id = rep(c("XXXXX", "YYYYY"), c(3000, 2000)), 
        d = c(d1$e, d2$e)) 

更復雜的數據操作可使用包如reshape2tidyr來完成。我發現this cheat sheet通常很有用。然後當我們繪圖時,我們將fill映射到id,ggplot將自動獲取圖例。

ggplot(d.f, aes(x = d, fill = id)) + 
    geom_density() 

enter image description here

+0

那偉大工程。它究竟做了什麼? – Zeke

+0

當您將數據框中的變量「映射」到「顏色」或「填充」之類的外觀上時,會創建圖例。假設你的兩個數據框是垂直疊加的(即「長」格式),並且有一個額外的列指定了數字來自哪個組。那個分組變量就是你想要的審美。 – Matt74

+0

增加了更多的解釋。 – Axeman