统计学-基于R(第四版)第二章课后习题2.1记录及总结

2.1 题目如下

 (1)基础操作为:

> Titanic<-read.csv("D:/作业/统计学R/TitanicCases.csv")
> attach(Titanic)
> table1<-table(Sex,Survived)
> library(DescTools)
> par(mfrow=c(1,2),mai=c(0.6,0.6,0.6,0.1),cex=0.7,cex.main=1,font.main=1) 
#设置页面布局,mai控制下左上右的图形内边框距离,cex代表整体字体大小,cex.main代表标题字体大小,font.main代表标题字体粗细

画条形图:

> b1<-barplot(table1,beside=TRUE,xlab="Survived",ylab="人数",main="(a)并列条形图",col=c("#66C2A5","#FC8D62"),legend=rownames(table1),args.legend=list(x=5,y=800,ncol=1,cex=0.7,box.col="grey80"))
> BarText(table1,b=b1,beside=TRUE,cex=1)
> b2<-barplot(table1,xlab="Survived",ylab="人数",main="(b)堆叠条形图",col=c("#66C2A5","#FC8D62"),legend=rownames(table1),args.legend=list(x=2,y=1000,ncol=1,cex=0.7,box.col="grey80"))
> BarText(table1,b=b2,cex=1)

注解:

(1)画条形图的关键词为barplot

(2)beside=TRUE是控制条形图并列分布的关键语句

(3)legend设置图例内容,args.legend设置图例位置颜色等

(4)BarText用于添加频数标签

出来的效果图为:

 这里虽说Titanic是R自带的数据集,但无法attach我就不知道该怎么用了,也不知道是不是我之前随便玩的时候弄坏了原本的Titanic数据集。因此采取了导入数据的方式,这样才好生成二维表进行之后的操作。

2022.3.14更新:

受到评论区小伙伴的思路的启发,我找到了不用导入csv文件就可以画图的方法,这里仅演示第一小题,后面的小题我想应该都是可以套用的!

代码为:

> library(DescTools)
> newdata = data.frame(Titanic)
> sexsurdata=xtabs(Freq~Sex+Survived, data=newdata)
> b1<-barplot(sexsurdata,beside=TRUE,xlab="Survived",ylab="人数",main="(a)并列条形图",col=c("#66C2A5","#FC8D62"),legend=rownames(sexsurdata),args.legend=list(x=5,y=1000,ncol=1,cex=0.7,box.col="grey80"))
> BarText(sexsurdata,b=b1,beside=TRUE,cex=1)
> b2<-barplot(sexsurdata,xlab="Survived",ylab="人数",main="(b)堆叠条形图",col=c("#66C2A5","#FC8D62"),legend=rownames(sexsurdata),args.legend=list(x=2,y=1000,ncol=1,cex=0.7,box.col="grey80"))
> BarText(sexsurdata,b=b2,cex=1)

画出来的图为:(和上面的不同就是男女颜色互换了,但都是对的~)

 

(2)相关理解见注释,完整代码为:

> Titanic<-read.csv("D:/作业/统计学R/TitanicCases.csv")
> par(mai=c(0.7,0.7,0.2,0.7),cex=0.7)
> x<-sort(table(Titanic$Class),decreasing=TRUE)
#生成一维表并将频数降序排列
> palette<-RColorBrewer::brewer.pal(4,"Blues")
#设置调色板
> bar<-barplot(x,xlab="Class",ylab="人数",main="帕累托图",col=blues9,ylim=c(0,1.2*max(x)))
#绘制条形图
> text(bar,x,labels=x,pos=3,col="black")
#为条形图增加频数标签
> y<-cumsum(x)/sum(x)
#计算累计频数
> par(new=T)
#绘制一幅新图加在现有图形上
> plot(y,type="b",pch=15,axes=FALSE,xlab='',ylab='',main='')
#绘制累积频数折线
> axis(side=4)
#在第4个边增加坐标轴
> mtext("累积频率",side=4,line=3,cex=0.8)
#添加坐标轴标签
> text(labels="累积分布曲线",x=3,y=0.93,cex=1)
#添加注释文本

 出来的效果图为:

 (3)这题有大坑啊,课本真的有毒,按课本做老是无法正确显示,写一下坑:

基础操作为:

> Titanic<-read.csv("D:/作业/统计学R/TitanicCases.csv")
> attach(Titanic)
> table3<-table(Class,Survived)
> par(mai=c(0.6,0.6,0.4,0.4),cex=0.7,cex.main=1,font.main=1)
> palette<-rev(RColorBrewer::brewer.pal(4,"Reds"))

这里有一个要注意的地方就是,Titanic不能直接用于spineplot里的data项,因此我采取的方式是读取Titanic内所需要的项(即Survived和Class)形成二维表使用

接下来按照课本的语句是:

> spineplot(Class~Survived,data=table3,col=palette,xlab="Survived",ylab="Class",main="脊形图")

但是出来的图一直是这样的:

 所以我就想是不是漏了什么语句,然后我上网查和翻课本都没找到解决方式,如果有知道的请告诉我一下

然后我的解决方式是:

> table3<-table(Survived,Class)
> spineplot(table3,col=palette,xlab="Survived",ylab="Class",main="脊形图")

我去掉了第一个语句,并且这里table3的导入数据顺序是不可以改的(就显得有点笨拙),第一个数据默认横坐标,第二个数据默认纵坐标,这样才能与脊形图中的横纵坐标相对应,最后正确的结果为:

 (4)相关理解见注释,完整代码为:

> Titanic<-read.csv("D:/作业/统计学R/TitanicCases.csv")
> par(mai=c(0.3,0.3,0.2,0.1),cex=0.7,cex.main=0.8)
> mosaicplot(~Class+Sex+Age+Survived,data=Titanic,cex.axis=0.8,off=5,main="马赛克图",shade = TRUE)

关键语句还是课本上没有的最后一句shade = TRUE。

添加选项shade = TRUE将根据拟合模型的皮尔逊残差值对图形上色。

出来的效果图为:

 (5)相关理解见注释,完整代码为:

饼图:

> Titanic<-read.csv("D:/作业/统计学R/TitanicCases.csv")
> par(mai=c(0.2,0.4,0.2,0.4),cex=0.7)
> tab5_1<-table(Titanic$Class)  #生成频数表
> name1<-names(tab5_1)  #设置名称向量
> percent1<-round(prop.table(tab5_1)*100,digit=2)  #保留两位小数计算百分比
> labs1<-paste(name1," ",percent1,"%",sep="")  #设置标签向量
> pie(tab5_1,labels = labs1,init.angle = 90,radius = 1,main="饼图")  #绘制饼图

 出来的效果图为:

 扇形图:

> library(plotrix)  #画扇形图必备包
> library(RColorBrewer)
> Titanic<-read.csv("D:/作业/统计学R/TitanicCases.csv")
> par(mai=c(0.2,0.4,0.2,0.4),cex=0.7)
> tab5_1<-table(Titanic$Class)
> name1<-names(tab5_1)
> percent1<-round(prop.table(tab5_1)*100,digit=2)
> labs1<-paste(name1," ",percent1,"%",sep="")
#绘制扇形图
> fan.plot(tab5_1,labels = labs1,max.span=0.9*pi,shrink=0.06,radius=1.2,label.radius=1.4,ticks=200,main="扇形图",col=c("#FB8072","#FFFFB3","deepskyblue","pink"))
#max.span设置扇形图最大跨度,shrink和radius设置扇形错开的距离和半径,label.radius设置标签与扇形的距离

出来的效果图为:

 环形图和饼环图:

> library(ggiraphExtra)
> library(ggplot2)
> library(gridExtra)  #加载包
> Titanic<-read.csv("D:/作业/统计学R/TitanicCases.csv")
> p1<-ggDonut(Titanic,aes(donuts=Class),colour = "white",xmin=2,xmax=4,title="环形图")
#绘制环形图
> p2<-ggPieDonut(data=Titanic,aes(pies=Class,donuts=Survived),title="饼环图")
#绘制饼环图
> grid.arrange(p1,p2,ncol=2)
#按2列组合图形p1和p2

出来的效果图为:

之后有空再写别的题,实在是太耗费时间了。最后贴一个我觉得写的挺好的博客,侵权删。

R语言图形篇(一)_小凤的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值