R直方图和密度图中的轴标记;多个密度图叠加

时间:2012-02-12 02:53:51

标签: r

我有两个相关的问题。

问题1 :我目前正在使用以下代码生成叠加密度图的直方图:

hist(x,prob=T,col="gray")
axis(side=1, at=seq(0,100, 20), labels=seq(0,100,20))
lines(density(x))

我已粘贴数据(例如上面的xhere

我对代码有两个问题:

  • x轴的最后一个刻度和标签(100)未出现在直方图/图上。我该怎么把它们放在上面?
  • 我希望y轴是计数或频率而不是密度,但我想将密度图保留为直方图上的叠加图。我怎么能这样做?

问题2 :使用与问题1类似的解决方案,我现在想要覆盖三个密度图(不是直方图),再次使用y轴上的频率而不是密度。这三个数据集位于:

  1. http://pastebin.com/z5X7yTLS

  2. http://pastebin.com/Qg8mHg6D

  3. http://pastebin.com/aqfC42fL

2 个答案:

答案 0 :(得分:5)

以下是您的前两个问题:

    myhist <- hist(x,prob=FALSE,col="gray",xlim=c(0,100))
    dens <- density(x)
    axis(side=1, at=seq(0,100, 20), labels=seq(0,100,20))
    lines(dens$x,dens$y*(1/sum(myhist$density))*length(x))

直方图的bin宽度为5,也等于1/sum(myhist$density),而density(x)$x为小跳跃,在你的情况下为大约.2(512偶数步长)。 sum(density(x)$y)是一个奇怪的数字,绝对不是1,但这是因为它分成小步,除以x间隔大约为1:sum(density(x)$y)/(1/diff(density(x)$x)[1])。您不需要稍后执行此操作,因为它已经与其自己的奇数x值匹配。 DWin表示,对于x hist()的频率,缩放1),宽度为length(x),2)。设置xlim参数后,最后一个轴刻度变为可见。

要解决您的问题2,请使用xlim设置具有正确尺寸(ylimtype = "n")的绘图,然后绘制3行密度,使用类似的缩放比例到上面的密度线。然而,想想你是否希望那些半连续的线条反映出宽度为5的虚拟条的高度......你会看到密度线如何在任何特定点夸大计数?

enter image description here

答案 1 :(得分:0)

虽然这是一个老化的线程,但如果有人抓住这个。我只认为根据用户试图做的事情,放弃将y密度转换为数量级是一个“好主意”。

使用频率作为y值有充分的理由。特别想到的一个想法是,如果混合分布模型不能合理或直观地应用,那么使用y比例值的计数可以使分析师很好地了解在何处开始用于分层异构数据的“数据搜索”。

实际上,在观察到的直方图上叠加密度估计值在数据质量检查中非常有用。例如,在上文中,如果我将上面的图形看作单个数据源,并假设它描述了“1件事”并且我希望将其建模为“1事情“,我有一个问题。也就是说,我有异构数据,可能需要一定程度的分层。然后,密度叠加成为用于检测异质性的简单视觉工具(除了使用对数变换以平滑间隔变化之外)和用于对数据进行分层的方向(混合分布的位置)。