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
出来的效果图为:
之后有空再写别的题,实在是太耗费时间了。最后贴一个我觉得写的挺好的博客,侵权删。