【问题标题】:Can't add a probability-curve on the histogram无法在直方图上添加概率曲线
【发布时间】:2012-12-05 12:15:32
【问题描述】:

我正在尝试使用 lattice-package 显示多个直方图。

到目前为止,这是我的代码:

histogram(~ X1 + X2 + X3 + X4 + X5 + X6 + X7 + X8 + X9 + X10, data=mydata, 
      type = "density",layout=c(5,2),
      panel=function(x, ...) {
        panel.histogram(x, ...)
        panel.mathdensity(dmath=dnorm, col="black",
                          args=list(mean=mean(x), sd=sd(x)), ...)
      })

问题是,它不会绘制概率曲线。它不会给我一个错误,所以我认为代码看起来不错。

我也试过只用一个变量,但也没有用:

histogram(~ X1, data=mydata, 
  type = "density",layout=c(5,2),
  panel=function(x, ...) {
    panel.histogram(x, ...)
    panel.mathdensity(dmath=dnorm, col="black",
                      args=list(mean=mean(x), sd=sd(x)), ...)
  })

有人在我的代码中看到错误吗?还是我的数据有问题?

很高兴有任何建议!

【问题讨论】:

  • 只有让您的示例代码可重现,我们才能真正帮助您。否则,我们必须猜测您的数据结构。请参阅stackoverflow.com/q/5963269/602276 如何执行此操作。

标签: r histogram lattice normal-distribution


【解决方案1】:

可能是您的数据包含缺失值吗?

# Create example data (no missings)
mydata <- data.frame(X1 = rpois(1000, 12), X2 = rnorm(1000, 12, sqrt(12)))

# Create some missing (NA) entries
mydata2 <- mydata
mydata2[sample(seq_len(nrow(mydata2)), 10), 1] <- NA

在直方图函数中使用上述mydata2 对象不会为X1 生成密度图,因为meansd 返回NA。将na.rm = TRUE 添加到这两个函数将返回panel.mathdensity 可以使用的值:

histogram(~ X1 + X2, data=mydata2, 
      type = "density",layout=c(1,2),
      panel=function(x, ...) {
        panel.histogram(x, ...)
        panel.mathdensity(dmath=dnorm, col="black",
# Add na.rm = TRUE to mean() and sd()
                          args=list(mean=mean(x, na.rm = TRUE),
                                    sd=sd(x, na.rm = TRUE)), ...)
      })

【讨论】:

    【解决方案2】:

    没有您的数据,很难为您提供帮助。

    这是一个简单的例子,也许可以帮助你。我尽量保留您的设置并更正一些设置。

    library(lattice)
    
    dat <- data.frame(X1 = rnorm(10000),Y1 =rnorm(10000))
    histogram(~X1+Y1,
              data = dat,
              main=list(
                label="Main plot title",
                cex=1.5),
              xlab=list(
                label="Custom x-axis label",
                cex=0.75),
              ylab=list(
                label="Your Y label ",
                cex=1.2),
              scales=list(cex=0.5),
              layout = c(1,2),
              par.settings = list(
                                  type = "density",
                                  panel=function(x, ...) {
                                    panel.histogram(x, ...)
                                    panel.mathdensity(dmath=dnorm, col="black",
                                                      args=list(mean=mean(x), sd=sd(x)), ...)
                                  })
    )
    

    【讨论】:

    • 谢谢,但我没有工作。我在您发布的图片上看不到概率曲线?
    猜你喜欢
    • 2021-11-23
    • 2016-01-10
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多