2014-11-14 56 views
0

我有一個實證的PDF + CDF組合我想在同一個面板上繪製。 distro.df具有列pdf,cdfday。我希望將pdf值繪製爲條形圖,將cdf繪製爲線條。這是做的陰謀伎倆:ggplot:一個情節的結合酒吧/線的傳說?

p <- ggplot(distro.df, aes(x=day)) 
p <- p + geom_bar(aes(y=pdf/max(pdf)), stat="identity", width=0.95, fill=fillCol) 
p <- p + geom_line(aes(y=cdf)) 
p <- p + xlab("Day") + ylab("") 
p <- p + theme_bw() + theme_update(panel.background = element_blank(), panel.border=element_blank()) 

但是,我有麻煩讓圖例出現。我想要一個cdf的行和一個pdf的填充塊。我已經嘗試過各種嚮導,但似乎無法獲得任何內容。

對此提出建議?

編輯:

每@ Henrik的要求:做一個合適的對象distro.df

df <- data.frame(day=0:10) 
df$pdf <- runif(length(df$day)) 
df$pdf <- df$pdf/sum(df$pdf) 
df$cdf <- cumsum(df$pdf) 

接着上面做出的情節,然後調用p看到的情節。

+0

@Henrik代碼生成一個合適的'distro.df'用於添加ggplot命令。 – Carl 2014-11-14 16:48:37

回答

1

這通常涉及將fill轉換爲aes,並將其用於geom_bargeom_line層。在這種情況下,您還需要將show_guide = TRUE添加到geom_line

一旦你有了這個,你只需要設置fill顏色scale_fill_manual,所以CDF沒有填充顏色,並使用override.aes爲線做同樣的事情。我不知道你的填充顏色是什麼,所以我只用紅色。

ggplot(df, aes(x=day)) + 
    geom_bar(aes(y=pdf/max(pdf), fill = "PDF"), stat="identity", width=0.95) + 
    geom_line(aes(y=cdf, fill = "CDF"), show_guide = TRUE) + 
    xlab("Day") + ylab("") + 
    theme_bw() + 
    theme_update(panel.background = element_blank(), 
       panel.border=element_blank()) + 
    scale_fill_manual(values = c(NA, "red"), 
        breaks = c("PDF", "CDF"), 
        name = element_blank(), 
        guide = guide_legend(override.aes = list(linetype = c(0,1)))) 
+0

輝煌的工作,謝謝;我想我會堅持我最終的方法,但這完全回答了這個問題。 – Carl 2014-11-14 17:16:34

0

我還是想解決以上(和將籤@ AOSMITH的答案),但我目前正在與一個略有不同的方法去消除需要解決的問題:

p <- ggplot(distro.df, aes(x=days, color=pdf, fill=pdf)) 
    p <- p + geom_bar(aes(y=pdf/max(pdf)), stat="identity", width=0.95) 
    p <- p + geom_line(aes(y=cdf), color="black") 
    p <- p + xlab("Day") + ylab("CDF") 
    p <- p + theme_bw() + theme_update(panel.background = element_blank(), panel.border=element_blank()) 
    p 

這也有顯示一些以前丟失的信息,即PDF值的優勢。