无法在直方图上添加概率曲线

3
我将尝试使用lattice包在一个图中显示多个直方图。
以下是我的代码:
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)), ...)
  })

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

感谢任何建议!


1
如果你的示例代码不可复制,我们其实很难帮助你。否则,我们只能猜测你的数据结构。请参考https://dev59.com/eG025IYBdhLWcg3whGSx的方法来做到这一点。 - Andrie
2个回答

4

你的数据是否可能存在缺失值?

# 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)), ...)
      })

histogram with density


0

没有你的数据,很难帮助你。

这是一个简单的例子,也许可以帮到你。我会尽力保留你的设置并纠正一些错误。

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)), ...)
                              })
)

enter image description here


2
谢谢,但是它没有起作用。我无法在你发布的图像上看到概率曲线? - Ventrue12

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接