19.基本统计图形目录:一.条形图二.饼图三.直方图四.箱线图五.点图六.散点图七.相关图八.QQ图九.等高线图十.热图正文:要观察分类变量与定量变量的数据,最基本的方法就是用图形:1.将变量的分布作可视化展示;2.通过结果变量进行跨组比较。一、条形图条形图通过垂直的或水平的条形展示了类别型变量的分布(频数)。函数barplot()的最简单用法是:barplot(height)其中,height为向量或矩阵。1.简单条形图(height为向量)library(vcd)#使用数据集Arthritiscounts-table(Arthritis$Improved)countsNoneSomeMarked421428par(mfrow=c(1,2))barplot(counts,main=SimpleBarPlot,xlab=Improvement,ylab=Frequency)#竖直条形图barplot(counts,main=HorizontalBarPlot,xlab=Frequency,ylab=Improvement,horiz=TRUE)#水平条形图2.堆砌条形图和分组条形图(height为矩阵)若beside=FALSE(默认值),则矩阵中的每一列都将生成图中的一个条形,各列中的值将给出堆砌的“子条”的高度。若beside=TRUE,则矩阵中的每一列都表示一个分组,各列中的值将并列而不是堆砌。library(vcd)#使用数据集Arthritiscounts-table(Arthritis$Improved,Arthritis$Treatment)countsPlaceboTreatedNone2913Some77Marked721par(mfrow=c(1,2))barplot(counts,main=StackedBarPlot,xlab=Treatment,ylab=Frequency,col=c(red,yellow,green),legend=rownames(counts))#堆砌条形图barplot(counts,main=GroupedBarPlot,xlab=Treatment,ylab=Frequency,col=c(red,yellow,green),legend=rownames(counts),beside=TRUE)#分组条形图注:棘状图可对堆砌条形图进行重缩放library(vcd)attach(Arthritis)counts-table(Treatment,Improved)spine(counts,main=SpinogramExample)detach(Arthritis)3.均值条形图条形图并不一定要基于计数数据或频率数据,也可以使用数据整合函数并将结果传递给函数barplot(),来创建表示均值、中位数、标准差等的条形图。states-data.frame(state.region,state.x77)means-aggregate(states$Illiteracy,by=list(state.region),FUN=mean)means-means[order(means$x),]#均值从小到大排序meansGroup.1x3NorthCentral0.7000001Northeast1.0000004West1.0230772South1.737500barplot(means$x,names.arg=means$Group.1)#参数2设置标签title(MeanIlliteracyRate)4.条形图的微调par(mar=c(5,8,4,2))par(las=2)#旋转图形标签counts-table(Arthritis$Improved)barplot(counts,main=TreatmentOutcome,horiz=TRUE,cex.names=0.8,names.arg=c(NoImprovement,SomeImprovement,MarkedImprovement))#cex.names缩小字体二、饼图饼图的功能同条形图,每一个扇形的角度与相应频数成比例。基本函数为:pie(x,labels)其中,x为非负数值向量,表示每个扇形的面积;labels表示各扇形标签的字符型向量。attach(mtcars)piedata-table(cyl)percent-as.vector(piedata)/sum(as.vector(piedata))*100#计算百分比pie(piedata,labels=paste(c(4,6,8),cylinders:,percent,%))detach(mtcars)注:饼图不容易比较各扇形的大小,plotrix包中的fan.plot()函数可以绘制扇形图。library(plotrix)slices-c(10,12,4,16,8)lbls-c(US,UK,Australia,Germany,France)fan.plot(slices,labels=lbls,main=FanPlot)三、直方图对于定量变量(数值型变量),常用直方图来展示某个变量取值的分布,利用直方图可以估计总体的概率密度。将变量取值的范围分成若干区间。直方图是用面积而不是用高度来表示数,总面积是100%.每个区间矩形的面积恰是落在该区间内的百分数(频率),所以矩形的高=频率/区间长度=密度特别地,若区间是等长的,则“矩形的高”就是频率。注意:直方图矩形之间是没有间隔的。函数hist()用于绘制直方图,基本格式为:hist(x,breaks=Sturges,freq=NULL,probability=...,main=...)其中,x为数值向量;breaks为分段区间:各区间端点构成的向量、分段数、计算划分区间的算法名称、划分区间个数的函数(方法);freq默认为TRUE表示绘制频数直方图,若为FALSE则绘制频率直方图;probability与freq对立,设置是否以概率密度作图,默认为FALSEattach(mtcars)par(mfrow=c(2,2))hist(mpg)#简单直方图hist(mpg,breaks=12,col=red,xlab=MilesPerGallon,main=Coloredhistogramwith12bins)#指定组数和颜色hist(mpg,freq=FALSE,breaks=12,col=red,xlab=MilesPerGallon,main=Histogram,rugplot,densitycurve)rug(jitter(mpg))#添加轴须lines(density(mpg),col=blue,lwd=2)#添加密度曲线x-mpghist(x,breaks=12,freq=FALSE,col=red,xlab=MilesPerGallon,main=Histogramwithnormalcurveandbox)lines(density(rnorm(1e+6,mean(mpg),sd(mpg))),lty=2,col=red)#添加正态密度曲线box()detach(mtcars)注:sm包中的函数sm.density.compare()也用于绘制核密度图,可以堆放多条密度曲线,用于组间差异的比较。基本格式为:sm.density.compare(x,group,h,...)其中,x为数值向量;group为分组变量(因子型数据);h为光滑参数。示例:library(sm)attach(mtcars)sm.density.compare(wt,factor(cyl))legend(topright,levels(factor(cyl)),lty=1:3,col=2:4,bty=n)detach(mtcars)四、箱线图在一条数轴上,以数据的上下四分位数(Q1-Q3)为界画一个矩形盒子(中间50%的数据落在盒内);在数据的中位数位置画一条线段为中位线;用◇标记数据的均值;默认延长线不超过盒长的1.5倍,之外的点认为是异常值(用○标记)。箱线图的主要应用就是,剔除数据的异常值、判断数据的偏态和尾重、可视化组间差异。用函数boxplot()绘制箱线图,单独的箱线图调用格式:boxplot(x,range=1.5,width=NULL,varwidth=FALSE,notch=FALSE,horizontal=FALSE,...)其中,x为一系列数值向量,依次做出箱线图;range设置延长线长度:几倍盒长,默认1.5;width设置盒长;varwidth设置盒宽与样本量的平方根是否成比例,默认FALSEnotch设置是否绘制带刻槽的凹形盒,默认FALSEhorizontal设置箱线图的方向,默认FALSE垂直作图,TURE为水平作图;2.组间比较的箱线图调用格式:boxplot(formula,data=NULL,subset,...)其中,formula为一个公式,例如y~grp,表示y为数值向量,grp为分组变量;data为提供数据的数据框;boxplot(mpg~cyl,data=mtcars,main=不同汽缸数量车型油耗的箱线图,xlab=NumberofCylinders,ylab=MilesPerGallon)可见,随着汽缸数的减少,油耗明显降低。mtcars$cyl.f-factor(mtcars$cyl,levels=c(4,6,8),labels=c(4,6,8))mtcars$am.f-factor(mtcars$am,levels=c(0,1),labels=c(auto,standard))boxplot(mpg~am.f*cyl.f,data=mtcars,varwidth=TRUE,col=c(gold,darkgreen),main=两个交叉因子的箱线图,xlab=AutoType)可见,对于四缸和六缸车型,标准变速箱的油耗更高。但是对于八缸车型,油耗似乎没有差别。注:将核密度图以镜像方式在箱线图上的叠加,可得到小提琴图。白点是中位数,黑色盒型的范围是下四分位点到上四分位点,细黑线表示须。外部形状即为核密度估计。library(vioplot)x1-mtcars$mpg[mtcars$cyl==4]x2-mtcars$mpg[mtcars$cyl==6]x3-mtcars$mpg[mtcars$cyl==8]vioplot(x1,x2,x3,names=c(4cyl,6cyl,8cyl),col=gold)title(ViolinPlotsofMilesPerGallon)五、点图点图提供了一种在简单水平刻度上绘制大量有标签值的方法。用dotchart()函数绘制点图,基本格式为:dotchart(x,labels=,groups=,cex=,pt.cex=,pch=,gpch=,color=,gcolor=...)其中,x为数值向量;labels为各个点的标签组成的向量;groups指定用来对x中元素进行分组的因子(参数gcolor可以控制不同组标签的颜色,cex可控制标签的大小);pch,pt.cex,color指定绘图符号,及其大小、颜色;dotchart(mtcars$mpg,labels=row.names(mtcars),cex=0.7,main=GasMilageforCarModels,xlab=MilesPerGallon)展示了同一个水平轴上观察每种车型的每加仑汽油行驶英里数,通常点图在经过排序并且分组变量被不同的符号和颜色区分开的时候最有用。x-mtcars[order(mtcars$mpg),]x$cyl-factor(x$cyl)x$color[x$cyl==4]-redx$color[x$cyl==6]-bluex$color[x$cyl==8]-darkgreendotchart(x$mpg,label