2012-12-05 115 views
2

我正在嘗試使用格子包顯示一個繪圖的多個直方圖。無法在直方圖上添加概率曲線

這是我到目前爲止的代碼:

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

我們實際上只能幫助你,如果你讓你的示例代碼重現性。否則,我們必須猜測數據的結構。請參閱http://stackoverflow.com/q/5963269/602276如何執行此操作。 – Andrie

回答

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

2

難道說你的數據包含缺失值?

# 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