正在加载
请稍等

菜单

Home 码农菜园 数据分析 R学习笔记-3 图形初阶
Home 码农菜园 数据分析 R学习笔记-3 图形初阶

R学习笔记-3 图形初阶

数据分析 by   阅读量 5,180

R最大的魅力在于其强大的图形绘制功能。“一图胜千言”,有时候数字和文字费劲心力展示出来的结果,往往不如一副恰到好处的图形来得清楚。更重要的是,有些模式和异常往往只有通过图形才能被人类所捕捉。

3.1 使用图形

来个简单的例子吧:

其中第六行代码用于生成一条最优拟合曲线。

如果需要保存图形,可以通过GUI操作,或者在代码中进行,将和绘图有关的代码加在开启目标图形设备语句和关闭目标设备语句之间即可:

除了pdf()外,还可以使用函数win.metafile()、png()、jpeg()、bmp()、tiff()、xfig()和postscript()将图形保存为其他格式。

3.2 一个简单的例子

基于以下数据,我们来走一遍R绘图涉及到的基本操作。以下数据描述了病人对两种药物五个剂量水平上的响应情况。

药物反应数据

首先输入数据:

使用以下代码创建一副描述药物A的剂量和响应关系的图形:

其中type=”b”表示同时绘制点和线,使用help(plot)可以查看其他帮助选项。

3.3 图形参数

可以通过修改称为图形参数的选项来自定义一副图形的多个特征(字体、颜色、坐标轴、标题)。一种方法是通过par()来指定这些选项,修改会一直维持到此次会话结束前有效。

第一行代码将当前可修改的图形参数复制了一份,第二行代码修改线型和点型,第三行代码绘图(你可以看到默认的实线变成了虚线,空心点变成了三角形),第四行还原了默认图形参数。

当然,也可以在绘图函数中直接包括图形参数,该参数仅对当前绘图有效:

符号和线条

绘图时使用的符号和线条类型包括:

  • pch:绘制点时使用的符号;
  • cex:指定符号的大小,填相对值,1为默认;
  • lty:线条类型;
  • lwd:线条宽度,填相对值,1为默认。

pch可选的选项:

点型参数

对于符号21~25,还可以指定边界颜色(col=)和填充色(bg=)。

lty可选的选项:

线型参数

颜色

R中常用的和颜色相关的参数包括:

  • col:默认的绘图颜色;
  • col.axis:坐标轴刻度文字的颜色;
  • col.lab:坐标轴标签的颜色;
  • col.main:标题颜色;
  • col.sub:副标题的颜色;
  • fg:图形的前景色;
  • bg:图形的背景色。

在R中,可以使用颜色下标、颜色名称、十六进制颜色值、RGB值或HSV值来指定颜色,例如,col=1、col=”white”、col=”#FFFFFF”、col=rgb(1,1,1)、col=hsv(0,0,1)都是表示白色的等价方式。

函数colors()可以返回所有可用颜色的名称。R中也有多种用于创建连续型颜色向量的函数,包括rainbow()、heat.colors()、terrain.colors()、topo.colors()以及cm.colors()。例如,rainbow(10)可以生成10种连续的“彩虹型”颜色,gray(0:10/10)将生成10阶灰度色。不妨试试以下代码:

文本属性

图形参数同样可以用来指定字号、字体和字样。

  • cex:指定相对缩放倍数,默认为1;
  • cex.axis:坐标轴刻度文字的缩放倍数;
  • cex.lab:坐标轴标签的缩放倍数;
  • cex.main:标题的缩放倍数;
  • cex.sub:副标题的缩放倍数。

以下则是指定字体、字号和字样的参数:

字符参数

图形尺寸和边界尺寸

使用以下三个函数来指定图形大小和边距:

  • pin:以英寸表示的图形尺寸(宽和高);
  • mai:以数值向量表示的边界大小,顺序为“下左上右”,单位为英寸;
  • mar:以数值向量表示的边界大小,顺序为“下左上右”,单位为英分,一英寸为十二英分。

3.4 添加文本、自定义坐标轴和图例

许多高级绘图函数(例如plot、hist、boxplot)也允许自行设定坐标轴和文本标注选项。以下代码在图形上添加了标题(main)、副标题(sub)、坐标轴标签(xlab、ylab)并指定了坐标轴范围(xlim、ylim)。

某些高级绘图函数已经包含了默认的标题和标签,可以通过在plot()语句或单独的par()语句中添加ann=FALSE来移除他们。

标题

可以使用title()函数为图形添加标题和坐标轴标签:

函数title()中还可以指定其他图形参数,如文本大小、字体、旋转角度和颜色。

坐标轴

可以使用axis()来创建自定义的坐标轴:

各参数含义如下:

坐标轴参数

创建自定义坐标轴时,需要禁用高级绘图函数自动生成的坐标轴。参数axes=FALSE将禁用全部坐标轴(包括坐标轴框架线),参数xaxt=”n”和yaxt=”n”将分别禁用X轴和Y轴(除去刻度,仍留下框架线)。来一个稍显复杂的例子:

函数mtext()用于在图形的边界添加文本,lines()可以为一副现有图形添加新的图形元素。

至于次刻度线,需要使用Hmisc包中的minor.tick()函数:

例如以下代码在X轴每两条主刻度线中添加一条次刻度线、在Y轴每两条主刻度线中添加两条次刻度线,次刻度线的长度为主刻度线的一半。

参考线

函数abline()可以用来为图形添加参考线:

在y为1、5、7的位置添加水平实线:

在x为1、3、5、7、9的位置添加垂直的蓝色虚线:

图例

当图形中包含的数据不止一组时,图例可用来帮助辨别出每个条形、扇形区域或折线各代表哪一类数据:

各参数含义如下:

  • location:可直接给出图例左上角x、y坐标,或执行locator(1)之后通过鼠标单击给出图例的位置,或使用bottom、bottomleft、left、topleft、top、topright、right、bottomright以及center等关键字,如果使用了以上关键字,还可以同时使用参数inset=指定图例向图形内侧移动的大小(以绘图区域大小的分数表示);
  • title:图例标题的字符串;
  • legend:图例标签组成的字符型向量。

还是药物反应的例子,这下包括更多我们已经接触的内容:

文本标注

可以通过text()和mtext()将文添加到图形上,前者向图形内部添加,而后者将文本添加至图形的四个边界之一。

各参数的含义如下:

  • location:文本的位置参数,可为一对x、y坐标,也可设为locator(1)通过鼠标选取;
  • pos:文本相对于位置参数的方位,1~4分别代表下左上右。如果指定了pos,就可以同时指定参数offset=作为偏移量,以相对于单个字符宽度的比例表示;
  • side:指定文本放置于哪一边,1~4分别代表下左上右。可以指定参数line=来内移或外移文本,随着值的增加文本将外移。也可使用adj=0将文本向左下对齐,或使用adj=1右上对齐。

数字标注

如果你需要在文本标注中添加数字标注(包括特殊的数学符号和表达式),不妨试试demo(plotmath),总能找出你需要的表达式。

3.5 图形的组合

在R中使用函数par()或者layout()可以容易地组合多幅图形为一副总括图形。

可以在par()函数中使用图形参数mfrow=c(nrows,ncols)来创建按行填充、行数为nrows、列数为ncols的图形矩阵;或者使用nfcol=c(nrows,ncols)按列填充矩阵。

函数layout()的调用形式为layout(mat),其中mat是一个矩阵,指定了所要组合的多个图形的所在位置。以下代码生成了一个布局:一共三幅图,第一行只有一副图,第二行有两幅图,而且第一行的高度是第二行的三分之一,第二行中第一幅图的宽度是第二幅图的四倍。

图形布局的精细控制

通过在par()中添加fig=参数,可以指定当前绘图用到绘图区域的哪个部分,从而实现多幅图形叠加在一起以增强表现效果。以下代码将当前绘图区域设置为x方向(水平方向)上0~0.5、y方向(竖直方向)上0~0.5的部分,即绘图区域左下方四分之一的区域,因为绘图区域的原点在左下方,而fig=参数的取值是一个形如c(x1,x2,y1,y2)的数值向量。

09 2015-04

发表评论