r - R 中具有叠加标准差曲线的多重直方图

标签 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")
}

最佳答案

因此可以使用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)
}

关于r - R 中具有叠加标准差曲线的多重直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35403643/

相关文章:

python - 试图猜测 R 的主目录,但路径中没有 R 命令。 OSX 10.6

r - 计算两个非零数字之间的零,然后通过 R 中的数字数组继续执行此操作

r - 如何在没有人为发明的情况下使r脚本定期运行

python - 使用 lineplot 使用 seaborn 绘制两条线

c++ - 在 C++ 中从中心按像素绘制实心圆?

matlab - 在 MATLAB 中的循环内绘图

r - if-else 与带列表的 ifelse

regex - 如何使用 R 解析 sysmon 文件以提取某些信息?

python - 如何为 Mayavi 的网格图使用掩码?

r - 改变 ggplot2 中嵌套面的美学