如何将多个概率密度函数组合到一个ggplot中?

时间:2016-02-18 06:37:00

标签: r plot ggplot2

我是一个完整的R菜鸟,我正在尝试将多个beta分布组合到一个ggplot中。这是我到目前为止所得到的......

#to create a continuous probability function

x=seq(0,1,.01)
q=dbeta(x,2.2,1.7)
z=dbeta(x,3.3,1.2)
df=data.frame(x,q,z)
t=ggplot(df, aes(x)) +                       # basic graphical object
       geom_line(aes(y=q), colour="red") +   # first layer
       geom_line(aes(y=z), colour="green")+  # second layer
       xlab("X value")+ylab("PDF")+
       ggtitle("Beta Probability Distribution  Functions")

我哪里出错了?

enter image description here

1 个答案:

答案 0 :(得分:3)

这是绘图的另一种方法:

library(tidyr)
library(ggplot2)

set.seed(1492) # reproducible

x <- seq(0, 1, .01)

q <- dbeta(x, 2.2, 1.7)
z <- dbeta(x, 3.3, 1.2)

df <- data.frame(x, q, z)

将它变成一个长数据框,这样我们就可以使用ggplot2 w / r / t美学的一些固有属性。

df <- gather(df, func, val, -x)

现在,我们可以使用美学映射与硬编码值并进行多个geom_line()

gg <- ggplot(df, aes(x=x, y=val, group=func))
gg <- gg + geom_line(aes(color=func)) 

稍微加强y轴限制

gg <- gg + scale_y_continuous(expand=c(0, 0))

我们现在实际上可以获得一个图例(你也可以删除它并用geom_text()手动标记这些行)

gg <- gg + scale_color_manual(name="Beta params", 
                              values=c("#b2182b", "#4393c3"),
                              labels=c("α=2.2, β=1.7", "α=3.3, β=1.2"))

将多个标签语句合并为一个。

gg <- gg + labs(x="x value", y="PDF",
                title="Beta Probability Distribution Functions")

删除一些图表垃圾。

gg <- gg + theme_bw()
gg <- gg + theme(panel.border=element_blank())
gg <- gg + theme(axis.line=element_line(size=0.15, color="#2b2b2b"))
gg

enter image description here