使用ggplot绘制DENSITY直方图

时间:2014-06-30 13:16:32

标签: r ggplot2

如何在两个直方图中同时绘制这两个向量中的值密度:

interactors1 = c(-6.4, -3.7, -7.7, -4.6, -2.0, -5.5, -3.3, -5.8, -5.0, -4.5,
                  3.2, -0.1, -3.0, -9.2, -3.1, -8.5, -5.4, -9.1, -7.7,  2.2,
                  1.7,  3.4, -8.6, -0.5, -8.1)

noninteractors1 = c(-1, 0.1, 2.7, 0.4, 4.3)

在你问之前,是的,我确实查看了this post

我想使用ggplot而不是hist,因为这些图看起来好多了。当我将数据融入数据框并绘制计数时,一切都很好 - 我得到了这个

interactors=data.frame(interactors1,noninteractors1)

ggplot(melt(interactors), aes(value, fill = variable)) 
      + geom_histogram(position = "dodge")

但是,我不需要数,我需要密度。

当我这样做时

ggplot(melt(interactors), aes(value, fill = variable)) 
   + geom_histogram(aes(y=..density..),position = "dodge")

我得到了一个严厉的结果。这是不对的,因为密度*箱的总和超过1.我做错了什么?任何帮助将不胜感激。

P.S。我尝试发布这些情节,但这并没有让我......

3 个答案:

答案 0 :(得分:2)

如果您不想设置binwidth = 1,则可以将y值乘以binwidth。例如:

m + geom_histogram(binwidth = 0.5,aes(y =(..density ..)* 0.5))

这允许您改变binwidth并使用适当的比例创建频率直方图。

答案 1 :(得分:1)

试试这个

data=(melt(interactors))
ggplot(data, aes(x=value, fill=variable)) + geom_histogram(aes(y=..density..), binwidth = 1)

答案 2 :(得分:0)

感谢Jaap和Philippe的回复,非常感谢。我在Google上找到了我想要的东西,但也会在这里发布 - 越多信息就越好。

为了使密度之和等于1,必须指定binwidth = 1(感谢Jaap)。当箱子不等于1时,密度之和不等于1.相反,密度*箱宽度乘积之和等于1.当binwidth = 1时,每个矩形的高度(密度)为等于变量值= x的概率。当binwidth!= 1时,其概率等于矩形的面积,即密度*矩形的宽度/ bin的大小/。

为每个人欢呼。 :)