R软件及编程应用中南财经政法大学信息与安全工程学院刘树栋第五讲:R的图形一、RGraphics概述二、自定义图形R中的绘图包:graphics、lattice和ggplot2。graphics包:包含用于绘制各种图形的函数,利用此包中函数可以定制或修改图形都很简单,也可以实现与屏幕上图形的交互。lattice包:适用于绘制按一定条件分隔数据的lattice图形。ggplot2包:使用了一套完全不同的方法,可以便捷地画出高质量的图。绘图命令的类型:高级绘图命令:在图形设备上产生一个新的图区,它可能包括坐标轴、标签、标题等。低级绘图命令:在一个已经存在的图上加上更多图形元素。交互式绘图命令:允许交互式地用鼠标在一个已经存在的图上添加图形信息或提取图形信息。总体概述高级绘图命令plot(x)以x的元素为纵坐标、以序号为横坐标绘图plot(x,y)x(在x-轴上)与y(在y-轴上)的二元绘图sunflowerplot(x,y)同上,但是以相似坐标的点作为花朵,其花瓣书目为点的个数pie(x)饼图boxplot(x)盒形图(“box-and-whiskers”)stripchart(x)把x的值画在一条线段上,样本量较小时可作为盒形图的替代dotchart(x)如果x是数据框,作Cleveland点图(逐行逐列累加图)pairs(x)如果x是矩阵或是数据框,作x的各列之间的二元图hist(x)x的频率直方图barplot(x)x的值的条形图qqnorm(x)正态分位数-分位数图qqplot(x,y)y对x的分位数-分位数图contour(x,y,z)等高线图(画曲线时用内插补充空白的值)filled.contour(x,y,z)同上,等高线之间的区域是彩色的,并且绘制彩色对应的值的图例image(x,y,z)同上,但是实际数据大小用不同色彩表示persp(x,y,z)同上,但为透视图stars(x)如果x是矩阵或者数据框,用星形和线段画出heatmap(x)热度图低级绘图命令scatter.smooth(x,y,…)LOESS(局部加权散点平滑)拟合曲线points(x,y)添加点(可以使用选项type=)lines(x,y)添加线text(x,y,labels,…)在(x,y)处添加用labels指定的文字;典型的用法是:plot(x,y,type=”n”);text(x,y,names)mtext(text,side=3,line=0,…)在边空添加用text指定的文字,用side指定添加到哪一边(参照下面的axis());line指定添加的文字距离绘图区域的行数segments(x0,y0,x1,y1)从(x0,y0)各点到(x1,y1)各点画线段arrows(x0,y0,x1,y1,angle=30,code=2)同上但加画箭头,如果code=2则在各(x0,y0)处画箭头,如果code=1则在各(x1,y1)处画箭头,如果code=3则在两端都画箭头;angle控制箭头轴到箭头边的角度abline(a,b)绘制斜率为b和截距为a的直线abline(h=y)在纵坐标y处画水平线abline(v=x)在横坐标x处画垂直线abline(lm.obj)画由lm.obj确定的回归线rect(x1,y1,x2,y2)绘制长方形,(x1,y1)为左下角,(x2,y2)为右上角polygon(x,y)绘制连接各x,y坐标确定的点的多边形legend(x,y,legend)在点(x,y)处添加图例,说明内容由legend给定title()添加标题,也可添加一个副标题axis(side,vect)画坐标轴,side=1时画在下边,side=2时画在左边,side=3时画在上边,side=4时画在右边。可选参数at指定画刻度线的位置坐标box()在当前的图上加上边框在x-轴上用短线画出x数据的位置rug(x)在用户用鼠标在图上点击n次后返回n次点击的坐标(x,y);并可以在点击处绘制符号(type=”p”时)或连线(type=”l”时),缺省情况下不画符号或连线locator(n,type=”n”,…)交互式绘图命令R中最简单、最常用的函数是locator(n,type),等待用户用鼠标左键点击n个位置,如果设置了type,可以根据这n个位置直接进行低级绘图。也可以先不绘图,只把用户点击的坐标记录下来。另一个常用的交互式函数是identify(x,y,labels),识别点的函数,可以交换点给图中的点加上标签。举例一、RGraphics概述1、散点图2、柱状图3饼图4、三维数据图5、绘制分布图Graphics包中的函数barplot柱状图或列图qqplotQ-Q图dotchart克利夫兰点图pairs散点图矩阵hist直方图imageimage图density核密度图contour等高图stripchart纸带图persp三维数据透视图qqnormQ-Q图interaction.plot双因子组融响应总结plot散点图sunflowerplot太阳花图smoothScatter平滑散点图1、散点图plot函数可以画出散点图,plot函数是一个泛型函数(可以画出不同类型的对象),plot函数可以画出多种类型的对象,包括向量、表格和时间序列等,最简单的散点图就是两个向量,调用的函数是plot.default。plot.default函数的定义形式如下:•函数参数说明如下:参数描述默认值x,y绘制的数据,可以是两个单独的向量,也可是时间序列、公式、列表type设置绘制类型的字符,type=“p”是画点,“1”画线,“o”重叠地画线和点,“b”用线将点连起来,“s”阶梯图“p”xlim/lim数量向量,设置图形x/y轴的范围NULLlog设置坐标轴是否取对数,log=“”表示不需要取对数,“x”对x轴取对数,“y”对y轴取对数,“xy”对x和y轴取对数“”main/sub图形的主标题/副标题NULLxlab/ylabx/y轴的标签NULLaxes逻辑值,表示是否画坐标轴TRUE举例举例:交互式应用identify函数给图中的点加标签,点击一个就添加一个举例:用text函数一次性给所有的点添加标签1、散点图只是把两列数据画出来,plot函数是个不错的选择。但是如果有很多列数据,而且这些列数据可能被分成很多类型,或要对比画出两个矩阵所有列的图,此时可用matplot函数matplot函数的定义形式如下:•函数参数说明如下:参数描述默认值x,y包含要画图的数据的向量或矩阵,x与y的行数和列数相等type同plot函数“p”xlim/lim数量向量,设置图形x/y轴的范围NULLlty设置线条类型的向量1:5lwd设置线宽的向量1xlab/ylabx/y轴的标签NULLpch设置要绘制的符号的向量NULLcol设置颜色的向量1:61、散点图如果要画大量的点,可用smoothScatter()函数matplot函数的定义形式如下:如果数据框中有n个变量,要逐对地画出这些变量间的散点图,可用pairs函数。举例1、散点图此外plot函数还可画时间序列数据图:plot(x,y=NULL,plot.type=c(“multiple”,“single”),xy.labels,xy.lines,panel=lines,nc,yax.flip=FALSE,mar.mult=c(0,5.1,0,if(yax.flip)5.1else2.1),oma.multi=c(6,0,5,0),axes=TRUE,…)举例2、柱状图在R中用barplot绘制柱状图barplot定义形式如下:•函数参数说明如下:参数描述默认值height数值向量或矩阵。如果是矩阵,且beside=FALSE,那么柱子就是分段的,否则,柱子会依次画出width向量,表示柱子的宽度1space若beside=FALSE,此值表示柱子之间的间隔,若为TRUE,还可设置一个两个元素的向量,一个元素表示每组柱子内部间隔,第二个元素表示每组柱子之间的间隔NULLnames.arg设置各个柱子名称的字符向量NULLlegend.text字符向量或逻辑值NULLbeside逻辑值,设置列应该分段显示在同一个柱子中还是逐个画出来。FALSEhorizFALSE时,柱子从左向右依次垂直立着,TRUE为从上到下依次水平的FALSE举例3、饼图在R中用pie函数绘制饼图pie定义形式如下:•函数参数说明如下:参数描述默认值x用于绘图的非负数值向量labels生成标签的表达式,字符串向量names(x)edges数值,表示应该用多少条线段来绘制饼图的边框200radius数值,表示饼图的大小0.8clockwise逻辑值,表示分块绘制的方向是顺时针还是逆时针FALSEInit.angle数值,设置分块的起始角度If(clockwise)90else0density数值,设置每英寸上阴影线的数量NULL举例4、三维图在R中有三个绘制三维图的函数:persp()、image()和contour()(1)persp(),可以画出特定角度的三维曲面。定义形式如下:•persp函数参数说明如下:参数描述默认值x,y数值向量,说明z中每个维度的含义z用于绘图的值的矩阵xlab、ylab、zlab设置x、y、z轴的标签的字符NULLmain、sub字符,设置图的主标题和副标题NULLtheta数值,设置视角的方位角方向0phi数值,设置视角的余纬度15expand数值,用于扩大(z1)或缩小z(z1)的坐标NULLcol曲面表面的颜色“white”scale逻辑值,设置在画图时是否要保持高宽比例TRUE举例举例4、三维图(2)image(),此函数会把矩阵中的数据点画成一个个的格子,格子的颜色对应于矩阵相应元素的数值。定义形式如下:•image函数参数说明如下:参数描述默认值x,y数值向量,说明z中每个维度的含义z用于绘图的值的矩阵xlim、ylim两个元素的向量,设置x、y轴的绘图范围zlimz中需要上色的值的范围col用于绘图的颜色向量一般用rainbow、heat.colors、topo.colors、terrain.colors之类的函数生成heat.colors(12)add逻辑值,设置是否要将画的图添加到已有的图上FALSExaxs、yaxsx轴和y轴的风格xlab=“i”,ylab=“i”xlab、ylabx轴和y轴的标签breaks整数,设置颜色的分隔点的数量举例4、三维图(3)contour(),此函数会画出等高线,把数据中相等的值连起来。定义形式如下:•contour函数参数说明如下:参数描述默认值x,y数值向量,说明网格线的位置与矩阵z中值的对应关系z用于绘图的数值向量nlevels等高水平的数量10levels数值向量,设置画线的位置xlim、ylim、zlim两个元素组成的数值向量,设置x轴、y轴和z轴在图中的范围labcex等高标签的字符缩放因子0.6method字符,设置画等高标签的位置drawlabels逻辑值,是否要画等高标签TRUEaxes逻辑值,是否需要画坐标轴举例举例5、绘制分布图在进行数据分析时,理解数据发布的形状比较重要,观察一个发布可以知道其中是否有异常值,还能看出给定范围内的观察数量。最广为人知的发布可视化方法是直方图,R中用hist函数画直方图。hist函数的定义形式如下(其中breaks参数表示直方图的组距):5、绘制分布图另一个查看发布的方法是Q-Q(quantile-quantile)图,Q-Q图会将样本数据与理论发布(通常都是正态发布)进行比较,顾名思义,这个图会画出样本分位数和理论发布的分位数,如果样本数据发布与理论发布一致,那么所有点都会从左下角到右上角的45度对角线上,Q-Q图可以有效地判断实际发布和期望发布的差异。在R中用qqnorm函