ggplot:情节组合条/线的传说?

时间:2014-11-14 16:20:07

标签: r ggplot2

我有一个经验PDF + CDF组合我想在同一个面板上绘图。 distro.df包含pdfcdfday列。我希望将pdf值绘制为条形,将cdf绘制为线条。这样可以制作情节:

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的填充块。我已经尝试了各种各样的指南扭曲,但似乎无法得到任何东西。

建议?

编辑:

Per @ 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来查看情节。

2 个答案:

答案 0 :(得分: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))))

答案 1 :(得分: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值。