1、下面我用一个具体例子来展示:数据:某校二年级学生共55人,数据表记录了在刚刚结束的体格检查中,55位学生的性别、身高情况及最近一次体育考试成绩。其中,性别xingbie中,1代表男性,2代表女性;成绩chengji中,1代表优秀,2代表良好,3代表中等,4代表及格。共55个数据,我共截取了19个数据。
2、1) 绘制该班身高分布的直方图,并在直方图中添加轴须图和密度曲线,使用灰色填充直方图;首先把excel数据导入Rstudio软件里,代码如下:read.csv(file.choose(),header=T)h<-read.csv(file.choose(),header=T)hattach(h)hist(shengao,main="身高直方图",xlab="身高",ylab="频数",xlim=c(100,160),ylim=c(0,15),col="gray")rug(jitter(shengao,amount=0.1))lines(density(shengao))box()hist(shengao,breaks=12,col="gray",freq=FALSE)lines(density(shengao))rug(jitter(shengao,amount=0.1))结果如图:
3、2) 绘制该班男女身高分布对比的箱型图;代码如下:boxplot(formula(shengao~xingbie))xingbie.f<-factor(xingbie,levels = c(1,2),labels = c("男生","女生"))boxplot(shengao~xingbie,col=c("gold","darkgreen"))结果如图:
4、3) 绘制该班性别与体育成绩交叉分组对比的身高箱型图,要求男生各组用蓝色表示,女生各组用红色表示,并用文字标示横轴分组信息。代码如下:boxplot(shengao~xingbie*chengji)xingbie.f<-factor(xingbie,levels=c(1,2),labels=c("男生","女生"))chengji.f<-factor(chengji,levels=c(1,2,3,4))boxplot(shengao~xingbie.f*chengji.f,col=c("blue","red"),xlab="性别~成绩",ylab="身高")结果如图:
5、4) 绘制该班男女身高分布对比的小提琴图,要求男、女生组用不同颜色表示,并用文字标示横轴分组信息;这个步骤需要安装vioplot包。代码如下:install.packages("vioplot")library(vioplot)x1<-shengao[xingbie==1]x2<-shengao[xingbie==2]vioplot(x1,x2,names =c("男生","女生"),col=c("green","yellow"),main="性别身高对比图",xlab="性别",ylab="身高")结果如图:
6、5) 绘制该班按体育成绩分组后的身高点图,要求组别标签为黑色,点和学生序号标签颜色按成绩等级分别为优秀红色,良好橙色,中等绿色,及格蓝色,绘图符号为实心三角形。代码如下:x<-h[order(chengji),]attach(x)chengji<-factor(chengji)x$color[chengji==1]<-"red"x$color[chengji==2]<-"orange"x$color[chengji==3]<-"green"x$color[chengji==4]<-"blue"dotchart(shengao,labels=row.names(x),cex=0.6,groups = xingbie,gcolor = "black",color = x$color,pch=17)结果如图:
7、分析:1)可看出此身高图身高平均居中在115-3250px之间。2)可分析出男生平均身高比女生高,女生最大值与最小值都大于男生。3)可知,优秀人数中,男生的中位数大于女生,女生最大值大于男生;良好人数中,男女生中位数基本一致,女生最大值大于男生;中等的人数中,男生中位数大于女生,男生最大值大于女生;及格人数中,女生普遍大于男生。4)可知,男女生中位数基本一致,核密度曲线相差不大。5)由图看出,不管男生还是女生,在不同程度上的成绩都基本上集中在一条线上。