【问题标题】:Combining histograms with a density plot in R将直方图与 R 中的密度图相结合
【发布时间】:2013-02-20 17:22:15
【问题描述】:

当我将两者结合在一个图中时,我似乎在直方图和密度线之间进行缩放。单独绘制的密度曲线和两者的组合之间存在明显的视觉差异。在两个图之间具有相同形状和比例的解决方案是什么(单独的密度和与 histo 结合时的密度)?我使用此代码:

hist(dataList[[cl12]],xlim=range(minx,maxx),breaks=seq(minx,maxx,pasx),col="grey",main=paste(paramlab,"Group",groupnum,Cl,sep=" "),xlab="",freq=FALSE) 
d<-density(dataList[[cl12]])
lines(d,col="red")

  dataList[[cl12]] <- c(4.399449e-02,  2.161474e-02, -1.515223e-05,  1.298059e+01,
      3.163949e-01, -1.785220e+00,  1.041053e+01,  6.327219e-01, -5.778590e-03)

感谢您的帮助!

【问题讨论】:

  • 看看ggplot2:那里的直方图可以很容易地与(适当缩放的)密度曲线相结合,在documentation中搜索“geom_density”
  • 如果您去掉了各种不必要的变量,如 minx、maxx、paramlab、groupnum 等,并通过例如使用“x”而不是“dataList”使其成为可重复的示例,这个问题会更容易回答[[c12]]".

标签: r histogram


【解决方案1】:

默认情况下,hist 绘制 bin 频率。如果要显示 bin 概率,使其与密度图的比例相匹配,可以使用 hist 的 freq 参数。这是一个例子:

x = rnorm(1000)
plot(density(x))
hist(x, freq=F, add=T)

【讨论】:

    【解决方案2】:

    这是做同样事情的另一种方式。

    test <- rnorm(1000)
    plot(density(test))
    par(new=T)
    hist(test, freq=F, xaxt="n", xlab="", ylab="", main="")
    

    【讨论】:

    • 这是我已经做的。看我的代码。这不能解决我的问题。
    【解决方案3】:

    我认为除了数据点非常少之外,您确实没有问题。当我将您的代码更改为可重现的版本时,它似乎很好。例如

    x <- c(4.399449e-02,  2.161474e-02, -1.515223e-05,  1.298059e+01,
          3.163949e-01, -1.785220e+00,  1.041053e+01,  6.327219e-01, -5.778590e-03)
    
    hist(x,col="grey",freq=FALSE, breaks=10) 
    d<-density(x)
    lines(d,col="red")
    

    这给出了一个丑陋的情节,但显然这是因为数据点数量少:

    如果您对更多数据点执行相同的方法,它似乎很好,例如:

    x <- rgamma(100,1,1)
    

    (使用相同的图形代码)

    【讨论】:

    • 谢谢你,彼得。但是,我意识到我应该更具体。事实上,我试图得到的是一个有两个数字的图,一个在另一个之上(par(mfrow = c(2, 1)),直方图和两个不同长度样本的密度曲线之间的组合。重要:我希望两者都具有相同的 x 轴,并且直方图(freq=false)具有相同的 bin 宽度。我做不到。密度曲线似乎不切实际(它们比条形高得多!)。我怎么能修复它?谢谢
    • 是的,这确实不像您的问题所问的那样。我建议您从一个新问题重新开始,并使用模拟数据提供一个可重复的示例。
    猜你喜欢
    • 2012-07-17
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多