ggplot:在密度图

时间:2016-04-20 00:45:11

标签: r ggplot2 density-plot

我的基本问题是如何为geom_density设置bin编号(默认为30)。

我发现即使箱子已被修改,y轴的密度也没有变化。

以下是一个例子:

values <- runif(1000, 1, 100)
ind <- as.factor(rep(c(1:2), each=500))
inout <- as.factor(rep(c(1:2), each =500))
df <- data.frame(values,ind,inout)

ggplot(df,aes(x=values, ..density..)) + 
    geom_freqpoly(aes(group=interaction(ind,inout), colour=factor(inout)), alpha=1, bins=1) 

密度应为1,因为箱号定义为1.但是,结果没有显示我的预期。

你知道我在这里想念的吗?有关ggplot geom_density的bin编号或bin阈值定义的提示吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

在ggplot中,您不需要设置垃圾箱数量,而是使用binwidth设置垃圾箱的宽度(默认值为范围/ 30)。 bin不是geom_freqpoly理解的术语,因此在示例代码中会被忽略。

我认为使用范围0-1(而不是1-100)的示例将更好地说明您期望看到的内容:

values <- runif(1000, 0, 1) # generate values between 0 and 1
ind <- as.factor(rep(c(1:2), each=500))
inout <- as.factor(rep(c(1:2), each =500))
df <- data.frame(values,ind,inout)

ggplot(df, aes(x=values, ..density..)) + 
    geom_freqpoly(aes(group=interaction(ind,inout), 
                      colour=factor(inout)), alpha=1) #use default binwidth, i.e. 1/30

这给出了一个类似于代码生成的图表

geom_freqpoly with default binwidth

范围为1时,设置binwidth = 1表示将有一个bin,其密度为1,值为0.5。请注意,现在值的范围是0.5到1.5,因为密度曲线下的面积必须总是为1.

ggplot(df, aes(x=values, ..density..)) + 
    geom_freqpoly(aes(group=interaction(ind,inout), 
                      colour=factor(inout)), alpha=1, binwidth = 1) #binwidth = 1

geom_freqpoly with binwidth set to 1

如果你增加你随机生成的点数并减小binwidth(例如尝试0.1,0.01,0.001等),你就会越来越接近&#34;正方形&#34;概率密度函数,您期望均匀分布(例如as shown on wikipedia