2014-11-14 84 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值的优势。