2016-02-15 2 views
1

Я хочу построить гистограмму, подобную этой, в R (если возможно, без установки дополнительных библиотек).Несколько гистограмм с кривой стандартного отклонения наложения в R

enter image description here

Изображение должно содержать гистограмму, метку, указывающую частоту, стандартное отклонение кривой, среднюю линию и линию, указывающие расстояние стандартного отклонения, например, красную линию на +1, -1 SD, желтую линию при + 2, -2 SD и зеленая линия при + 3, -3 SD

Это код для построения графиков с несколькими гистограммами, но он не может построить кривую стандартного отклонения. Код для пилотирования стандартного отклонения берется из here.

library(xts) 
dimension = function(df){ 
    kk = dim(df)[2]; 

    x = round(sqrt(kk),0); 
    y = ceiling(kk/x); 

    return(c(x,y)) 
} 


set.seed(3) 
Ex <- xts(1:100, Sys.Date()+1:100) 
df = data.frame(Ex,matrix(rnorm(100*6,mean=123,sd=3), nrow=100)) 
df<-df[,-1] 
m<-list() 
std<-list() 

par(mfrow = dimension(df)) 

for(i in names(df)){ 
    m[[i]]<-mean(df[[i]],na.rm=TRUE) 
    std[[i]]<-sd(df[[i]],na.rm=TRUE) 
    hist(df[[i]] , main="Histogram",xlab="x",col="green",label=TRUE,plot = TRUE) 
    curve(dnorm(x, mean=m[[i]], sd=std[[i]]), col="darkblue", lwd=2, add=TRUE, yaxt="n") 
} 
+1

Просто прочитайте комментарий ниже принятого ответа, то есть установите 'freq' в' FALSE' в 'hist'. –

ответ

1

Таким образом, стандартные линии отклонения могут быть легко добавлены с помощью abline(). Кроме того, как предложено Pascal, используйте freq = FALSE, чтобы соответствующим образом масштабировать ось y.

for(i in names(df)){ 
    m[[i]]<-mean(df[[i]],na.rm=TRUE) 
    std[[i]]<-sd(df[[i]],na.rm=TRUE) 
    hist(df[[i]] , main="Histogram",xlab="x",col="green",label=TRUE,plot = TRUE, freq = F) 
    curve(dnorm(x, mean=m[[i]], sd=std[[i]]), col="darkblue", lwd=2, add=TRUE, yaxt="n") 

    # Use abline 
    abline(v = m[[i]], lty = 2) 
    abline(v = m[[i]]+std[[i]], lty = 2) 
    abline(v = m[[i]]-std[[i]], lty = 2) 
    abline(v = m[[i]]+2*std[[i]], lty = 2) 
    abline(v = m[[i]]-2*std[[i]], lty = 2) 
} 
Смежные вопросы