多重直方图,R中有重叠标准差曲线

时间:2016-02-15 07:25:50

标签: r plot

我想在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 个答案:

答案 0 :(得分: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)
}