我有一个经验PDF + CDF组合我想在同一个面板上绘图。 distro.df
包含pdf
,cdf
和day
列。我希望将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
来查看情节。
答案 0 :(得分:1)
这通常涉及将fill
移至aes
并在geom_bar
和geom_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值。