频数分布直方图能清楚地显示各组频数分布情况,同时直观展示各组之间频数的差别,是数据分析过程中常用的一种图。
画频数分布直方图的方法有很多,可以用SPSS、Excel等等,但这些工具操作起来比较繁琐,在这里小编教大家用R语言快速绘制频数分布直方图。
首先我们需要准备绘制频数分布直方图的数据,第一列为样本名称(可省略),第二列为表型数据。
代码语言:javascript复制## 导入数据
trait <- read.table("trait.txt",header=T,sep="t",row.names=1)
## 选择表型数据
x <- trait$A
## 绘制频数分布直方图
h <- hist(x,col="#6289c3",freq=TRUE,lwd=2,cex.axis=1.5,cex.lab=1.5,main="",ylab="",xlab="",cex.main=1.5)
频数分布直方图
代码语言:javascript复制## 绘制频率分布直方图(与频数分布直方图代码的区别为freq=FALSE)
h <- hist(x,col="#6289c3",freq=FALSE,lwd=2,cex.axis=1.5,cex.lab=1.5,main="",ylab="",xlab="",cex.main=1.5)
频率分布直方图
代码语言:javascript复制## 绘制轴须图
rug(jitter(x),side=1,col="#c7513b",lwd=1)
红色部分就是绘制出来的轴须图(rug plot),轴须图是数据的一维展示方式,可以清楚地让我们看到实际数据分布在哪里。
代码语言:javascript复制## 绘制正态曲线
xfit <- seq(min(x),max(x),length=40)
meannum <- mean(x,na.rm=TRUE)
sdnum <- sd(x,na.rm=TRUE)
yfit <- dnorm(xfit,mean = meannum,sd=sdnum)
yfit <- yfit*diff(h$mids[1:2]*length(x))
lines(xfit,yfit,col="black",lwd=2)
至此,我们的图就画好了!图中很多细节还可以使用下面代码微调。
代码语言:javascript复制## xlim设置X轴范围,ylim设置Y轴范围
hist(x,col="#6289c3",freq=TRUE,xlim=c(10,35),ylim=c(0,15),lwd=2,cex.axis=1.5,cex.lab=1.5,main="",ylab="",xlab="",cex.main=1.5)
代码语言:javascript复制## breaks设置组数
hist(x,col="#6289c3",freq=TRUE,breaks=10,xlim=c(10,35),lwd=2,cex.axis=1.5,cex.lab=1.5,main="",ylab="",xlab="",cex.main=1.5)
代码语言:javascript复制## 添加外框
box(lwd=2)
参考资料:
R语言实战(第2版)118-119页
https://blog.csdn.net/ilovemoon10/article/details/7780391