plot函数用法 ==================== plot函数为泛型函数,根据输入的参数选择具体的绘制逻辑。绘制简单的散点图(scatter plot),将会使用plot.default() plot有多个参数,可以通过帮助显示plot函数及其参数信息: ```{r showHelp} ?plot ``` 每个绘图设备都有一套自己的图形参数。如果当前图形设备为空(null device),在获取或设置图形参数之前,将自动新建一个图形设备。 函数语法 -------- plot(x, y, ...) plot参数可由par()函数提供,也可以直接由键值对提供。 + main, 主标题 + sub,副标题 + xlab,x轴标题 + ylab,y轴标题 + asp,图形纵横比,y/x par()函数参数 -------- `par()`函数或`par(no.readonly = TRUE)`, 获取当前设备的所有图形参数。 ```{r} length(par()) par() ``` - x,y 要作图的向量,x为必选参数,y为可选参数。如y缺失,即对其函数的位置(在向量重点index)作散点图,x轴为位置,y轴为数值。 ```{r} plot(1:10) ``` - type:图形样式类型,共九种 + "p", 点(point) + "l",线(line), + "b",点和线,不重叠,两者之间有间隔, + "c","b"中的点去掉,只剩线条, + "o",点和线,点线重叠(overplotted), + "h" ,铅垂线,类似于直方图(histogram)或密度图(high-density)的垂直线, + "s",阶梯线(stair step),先水平后垂直 + "S", 阶梯线,先垂直后水平, + "n",空图. - adj,调整图中字符的相对位置(adjust) 取值:长度为2的数值向量,分别表示字符边界矩形框的左下角相对坐标点(x, y)位置的偏移,向量的两个数值 一般都在[0; 1]范围中(有些图形设备中也可以超出此范围),表示字 符串以左下角为基准、根据自身的宽度和高度分别向左和向下移动的 比例,默认为c(0.5, 0.5)。例如c(0, 0)表示整个字符(串)的左下 角对准设定的坐标点,而c(1, 0)则表示字符串横向移动了自身宽度 的距离,而纵向不受影响。具体示例参见图3.1左上 - ann,注释(annotation) 如果设为FALSE, 高级绘图函数调用plot.default时不会绘制坐标轴和其他全部的表其他,默认值为绘制注释。 - ask, 是否确认转换图形设备 切换到下一个新的作图设备(通常是作一幅新图)时是否需要用户输 入(敲回车键或点鼠标);TRUE表示是;FALSE表示否。当有多幅图将 逐一出现而需要按顺序一步步在图形设备上展示时很有用,这种情况 下若设置ask为TRUE,那么作图时每一副新图的出现都要先等待用户 输入,否则所有的图将会一闪而过 - bg 设置图形背景色(background) - bty 设置图形边框样式(border type) 取值为字符o, l, 7, c, u, ]之一;这些字符 本身的形状对应着边框样式,比如(默认值)o表示四条边都显示, 而c表示不显示右侧边 - cex 缩放倍数(可能是charactor extension的缩写,extend,延伸,扩大) 取值为一个相对于1的数值 (默认为1)。具体的细节缩放可以通过如下参数设置(默认值均为1): + cex.axis 坐标轴刻度标记 + cex.lab 坐标轴标题 + cex.main 图主标题 + cex.sub 图副标题 - cin, 用英寸表示的字符大小(charactor in inches) 只读参数,(width, height)。该测度与cra相同,单位不同。 - col, 图中符号(点、线等)的颜色(color) 与cex参数类似,具体的细节颜色也可以通过如下参数设置: + col.axis 坐标轴刻度标记的颜色 + col.lab 坐标轴标题的颜色 + col.main 图主标题的颜色 + col.sub 图副标题的颜色 - cra, (character size in raster) 默认的字符大小(width, height),使用栅格图像表示的单位(pixels) R.O.; 有些设备没有像素概念,假定一个默认的像素大小,一般取值为1/72英寸,即每英寸72个点。这个参数与cin相同,单位不同。 - family 设置文本的字体族(衬线、无衬线、等宽、符号字体等) 标准取值有:serif, sans, mono, symbol,参见图3.2坐标(2, 8)处的文本; family = 'symbol'的情况没有显示出来 + crt A numerical value specifying (in degrees) how single characters should be rotated. It is unwise to expect values other than multiples of 90 to work. Compare with srt which does string rotation. + csi R.O.; height of (default-sized) characters in inches. The same as par("cin")[2]. +cxy R.O.; size of default character (width, height) in user coordinate units. par("cxy") is par("cin")/par("pin") scaled to user coordinates. Note that c(strwidth(ch), strheight(ch)) for a given string ch is usually much more precise. + din R.O.; the device dimensions, (width, height), in inches. See also dev.size, which is updated immediately when an on-screen device windows is re-sized. + fg 设置前景色(若后面没有指定别的颜色设置,本参数会影响几乎所有的 后续图形元素颜色,若后续图形元素有指定的颜色设置,那么只是影 响图形边框和坐标轴刻度线的颜色);颜色值参见4.1节。 + fig A numerical vector of the form c(x1, x2, y1, y2) which gives the (NDC) coordinates of the figure region in the display region of the device. If you set this, unlike S, you start a new plot, so to add to an existing plot use new = TRUE as well. + fin The figure region dimensions, (width, height), in inches. If you set this, unlike S, you start a new plot. + font 设置文本字体样式;取值为一个整数;通常1、2、3、4分别表示正常、 粗体、斜体和粗斜体1,4.6节有进一步的介绍,参见图3.2的图主标题 字体 font.axis 坐标轴刻度标签的字体样式 font.lab 坐标轴标题的字体样式 font.main 图主标题的字体样式 font.sub 图副标题的字体样式 + lab 设置坐标轴刻度数目(R会尽量自动“取整”2);取值形式c(x, y, len):x和y分别设置两轴的刻度数目,len目前在R中尚未生效,因此 设置任意值都不会有影响(但用到lab参数时必须写上这个参数) + las 坐标轴标签样式(label of axis);取0、1、2、3四个整数之一,分别表示“总是平行于 坐标轴”、“总是水平”、“总是垂直于坐标轴”和“总是竖直”。仔细 观察图3.2中四幅图的不同坐标轴标签方向 + lend 线条末端的样式(圆或方形), line end;取值为整数0、1、2之一(或相应的字 符串'round', 'mitre', 'bevel'),注意后两者的细微区别3 + lheight 图中文本行高,line height;取值为一个倍数,默认为1 + ljoin 线条相交处的样式, line join;取值为整数0、1、2之一(或相应的字符串'round', 'mitre', 'bevel'),分别表示画圆角、画方角和切掉顶角,观察 图3.1的三个直角的顶点 + lmitre The line mitre limit. This controls when mitred line joins are automatically converted into bevelled line joins. The value must be larger than 1 and the default is 10. Not all devices will honour this setting. + lty 线条虚实样式, line type:0 )不画线,1 )实线,2 )虚线,3 )点线,4 )点划 线,5 )长划线,6 )点长划线;或者相应设置如下字符串(分别对 应前面的数字):'blank', 'solid', 'dashed', 'dotted', 'dot- dash', 'longdash', 'twodash';还可以用由十六进制的数字组成 的字符串表示线上实线和空白的相应长度,如'F624',详细解释请参 见4.3一节。 + lwd 线条宽度, line width;默认为1 + mai mar in 英寸 A numerical vector of the form c(bottom, left, top, right) which gives the margin size specified in inches. + mar 设置图形边界空白宽度;按照“下、左、上、右”的顺序,默认为c(5, 4, 4, 2) + 0.1 + mex 设置坐标轴的边界宽度缩放倍数character size expansion factor for margin;默认为1,本参数会影响到mgp参数 mex is a character size expansion factor which is used to describe coordinates in the margins of plots. Note that this does not change the font size, rather specifies the size of font (as a multiple of csi) used to convert between mar and mai, and between oma and omi. + mfrow, mfcol 设置一页多图;取值形式c(nrow, ncol)长度为2的向量,分 别设置行数和列数,参见附录B.2 + mfg A numerical vector of the form c(i, j) where i and j indicate which figure in an array of figures is to be drawn next (if setting) or is being drawn (if enquiring). The array must already have been set by mfcol or mfrow. For compatibility with S, the form c(i, j, nr, nc) is also accepted, when nr and nc should be the current number of rows and number of columns. Mismatches will be ignored, with a warning. + mgp 设置坐标轴的边界宽度;取值长度为3的数值向量,分别表示坐标轴 标题、坐标轴刻度线标签和坐标轴线的边界宽度(受mex的影响),默 认为c(3, 1, 0),意思是坐标轴标题、坐标轴刻度线标签和坐标轴线 离作图区域的距离分别为3、1、0 + new logical, defaulting to FALSE. If set to TRUE, the next high-level plotting command (actually plot.new) should not clean the frame before drawing as if it were on a new device. It is an error (ignored with a warning) to try to use new = TRUE on a device that does not currently contain a high-level plot. + oma 设置外边界(Outer Margin)宽度;类似mar,默认为c(0, 0, 0, 0),当一页上只放一张图时,该参数与mar不好区分,但在一页多图 的情况下就容易可以看出与mar的区别 + omd A vector of the form c(x1, x2, y1, y2) giving the region inside outer margins in NDC (= normalized device coordinates), i.e., as a fraction (in [0, 1]) of the device region. + omi A vector of the form c(bottom, left, top, right) giving the size of the outer margins in inches. + page R.O.; A boolean value indicating whether the next call to plot.new is going to start a new page. This value may be FALSE if there are multiple figures on the page. + pch 点的符号;pch = 19)实圆点、pch = 20)小实圆点、pch = 21)圆 圈、pch = 22)正方形、pch = 23)菱形、pch = 24)正三角尖、pch = 25)倒三角尖,其中,21-25可以填充颜色(用bg参数) + pin The current plot dimensions, (width, height), in inches. + plt A vector of the form c(x1, x2, y1, y2) giving the coordinates of the plot region as fractions of the current figure region. + ps integer; the point size of text (but not symbols). Unlike the pointsize argument of most devices, this does not change the relationship between mar and mai (nor oma and omi). What is meant by ‘point size’ is device-specific, but most devices mean a multiple of 1bp, that is 1/72 of an inch. + pty 设置作图区域的形状;默认为'm':尽可能最大化作图区域;另外一种 取值's'表示设置作图区域为正方形 + srt 字符串的旋转角度 string rotation;取一个角度数值,参见图3.1左下方小图中分别旋 转30°和120°的字符串 + tck 坐标轴刻度线的高度,tick;取值为与图形宽高的比例值(0到1之间);正值 表示向内画刻度线,负值表示向外;默认为不使用它(设为NA),而 使用tcl参数 + tcl 坐标轴刻度线的高度, tick length;取一个与文本行高的比例值;正负值意义类 似tck,默认值为-0.5,即向外画线,高度为半行文本高;观察图3.1左 下角小图的坐标轴刻度线 + usr 作图区域的范围限制,取值长度为4的数值向量c(x1, x2, y1, y2), 分别表示作图区域内x轴的左右极限和y轴的下上极限;注意,若坐标 取了对数(参见xlog, ylog两个参数),那么实际上设置的极限都是10的 相应幂次 + xaxp A vector of the form c(x1, x2, n) giving the coordinates of the extreme tick marks and the number of intervals between tick-marks when par("xlog") is false. Otherwise, when log coordinates are active, the three values have a different meaning: For a small range, n is negative, and the ticks are as in the linear case, otherwise, n is in 1:3, specifying a case number, and x1 and x2 are the lowest and highest power of 10 inside the user coordinates, 10 ^ par("usr")[1:2]. (The "usr" coordinates are log10-transformed here!) n = 1 will produce tick marks at 10^j for integer j, n = 2 gives marks k 10^j with k in {1,5}, n = 3 gives marks k 10^j with k in {1,2,5}. See axTicks() for a pure R implementation of this. + xaxs, yaxs 坐标轴范围的计算方式;默认'r':先把原始数据的范围向外扩 大4%,然后用这个范围画坐标轴;另外一种取值'i'表示直接使用原 始数据范围;实际上还有其它的坐标轴范围计算方式,但是鉴于它们 目前在R中都尚未生效,所以暂不加介绍 + xaxt, yaxt 坐标轴样式,x or y axis toggle;默认's'为标准样式;另外一种取值'n'意思是不 画坐标轴 + xlog, ylog 坐标是否取对数;默认FALSE + xpd 对超出边界的图形的处理方式;取值FALSE:把图形限制在作图区域 内,出界的图形截去;取值TRUE:把图形限制在图形区域内,出界的 图形截去;取值NA:把图形限制在设备区域内。这些区域的说明参见 下文和图3.3 + yaxp A vector of the form c(y1, y2, n) giving the coordinates of the extreme tick marks and the number of intervals between tick-marks unless for log coordinates, see xaxp above. ### 颜色函数 colors()或colours() 它们不需要任何参数,会生成657种颜色名称,如:'beige'(米色)、 'bisque'(桔黄色)、'chocolate'(巧克力色)、'cyan'(青色)、 'gold'(金黄色)、'ivory'(象牙色)、'lavender'(浅紫色)等。 下面的代码表示从colors()中随机抽取20种颜色1: ```{r} sample(colors(), 20) ``` 输出全部颜色到pdf文件: ``` pdf("C:/colors-bar.pdf", height = 120) par(mar = c(0, 10, 3, 0) + 0.1, yaxs = "i") barplot(rep(1, length(colors())), col = rev(colors()), names.arg = rev(colors()), horiz = TRUE, las = 1, xaxt = "n", main = expression("Bars of colors in" ~ italic(colors()))) dev.off() ``` ### palette() 调色板函数 用法palette(value),这个函数用来设置调色板或 者获得调色板颜色值;注意,实际上这个函数的结果可能并非“固定” 颜色,但是只要设定好了调色板,它的取值就不会再改变(直到下一 次重新设定调色板)。如果不写任何参数,那么该函数返回当前的调色 板设置,即一个包含当前调色板中所有颜色的向量;若参数长度为1则 将当前调色板重新设置为以该参数为名称的调色板,目前这种参数只 有'default'这一种,即设置为默认调色板:palette('default'); 若参数为一个颜色向量,那么将当前调色板中的颜色更改为该参数表 示的颜色。 ```{r} # 默认的调色板颜色 palette() # 重新设置调色板为colors()的前10种颜色 palette(colors()[1:10]) # 更改后的调色板颜色 palette() # 恢复默认调色板 palette("default") ``` 调色板的好处在于,我们可以在R中使用一个整数来表示颜色,而这 个整数对应的颜色就是调色板中相应位置的颜色,比如在某作图函数 中调用参数col = 2表示取调色板中第2种颜色。若整数值超过了调色 板颜色向量的长度,那么R会自动取该整数除以调色板颜色向量长度 的余数。 ### 颜色生成和转换函数 R提供了一系列利用颜色生成原理如RGB模型(红绿蓝三原色混合)、 HSV色彩模型(色调、饱和度和纯度)、HCL色彩模型(色调、色度和亮 度)和灰色生成模型等构造的颜色。颜色的构造原理比较复杂,超出了本 书讨论范围,因此这里仅对相关函数的用法作介绍。 #### rgb() 红绿蓝三原色混合,用法rgb(red, green, blue, alpha, names = NULL, maxColorValue = 1),其中前四个参数都取值于区间[0, maxColorValue],names参数用来指定生成颜色向量的名称。这里 前三个参数不用过多解释,值越大就说明那种颜色的成分越高;可 能alpha我们不太熟悉,它指的是颜色的透明度,取0表示完全透明, 取最大值表示完全不透明(默认),透明度在统计图形中有着重要地 位,因为它具有一个非常有用的性质—透明度可以叠加,即:两个或 多个带有透明色的图形元素重叠在一起时,重叠部分的透明度会变 小;这在某些统计图形中可以找到很好的应用,例如当散点图中点的 数目过多而导致大量的点相互重叠时,我们可以使用透明色来看清图 中的深层规律,其中一个直接的规律就是二维密度,点重叠越密集, 则颜色越深(由于透明度的的叠加),该处的密度值也越大,图5.8给 出了一个半透明色应用的示例。 ### hsv() 用色调(Hue)、饱和度(Saturation)和纯度(Value)来构造颜色, 用法hsv(h = 1, s = 1, v = 1, gamma = 1, alpha),前三个参数 分别对应色调、饱和度和纯度,取值于区间[0, 1],参数gamma表示 伽玛校正3(Gamma Correction);alpha意思同上,但取值在区间[0, 1]上 ### hcl() 用色调(Hue)、色度(Chroma)和亮度(Luminance)构造颜色, 用法为hcl(h = 0, c = 35, l = 85, alpha, fixup = TRUE);参数 h取值在区间[0, 360]上,可以将它想象为一个角度:0 °表示红 色,120°表示绿色,240°表示蓝色,中间的都是过渡色;参数c取 值受h和l限制;参数l取值在区间[0, 100]上,取值越大生成的颜色越 亮;alpha意思同hsv();fixup表示是否修正生成的颜色值,之所以要修正 ,是因为有些搭配生成的RGB颜色(r, g, b)可能出现某一个元素超 过1的情形 ### gray(), grey() 生成灰色系列; 只有一个参数level,表示灰度水平,取值 在0到1之间,其中0表示纯黑色,而1表示纯白色;level取一个向量则 可以生成一系列灰色值,如下例: 1 > gray(seq(0, 1, length = 5)) [1] "#000000" "#404040" "#808080" "#BFBFBF" "#FFFFFF" 熟悉十六进制的人应该能看出这些颜色都是由六个十六进制数字组成 的,每两位数字(合起来取值从0到255)分别表示红绿蓝(RGB颜色) 的比例,我们知道,当三原色完全混合时,生成的颜色是白色,上面 结果的最后一个'#FFFFFF'正是纯白色。 ## 颜色转换函数rgb2hsv() 将RGB颜色转换为HSV颜色,用法rgb2hsv(r, g = NULL, b = NULL, gamma = 1, maxColorValue = 255);所有参数意思已经在上 面的列表中解释过,只是要注意,当r是一个矩阵时,另外两个参数g 和b就应省略不写。下例中我们将一个3  4的RGB颜色矩阵传入函 数rgb2hsv(),该函数会把每一列RGB颜色都转化为相应的HSV颜色。 颜色矩阵的前三列分别是红、绿和蓝色,请观察和对比两种颜色系统 的表示方法。 ```{r} # 赋值给变量rgb.mat (rgb.mat = matrix(c(255, 0, 0, 0, 255, 0, 0, 0, 255, + 10, 100, 200), nrow = 3)) rgb2hsv(rgb.mat) ``` col2rgb() 将任意一种R颜色值转换为RGB表示,用法col2rgb(col, alpha = FALSE);参数col的取值可以有三种形式,第一种是colors()函数中的 任意一种颜色名称(字符串),第二种是如'#rrggbb'十六进制形式的 的RGB颜色表示,第三种是一个整数,即调色板中相应位置的颜色。 # 调色板中第4 种颜色默认是蓝色 col2rgb(4) ## 点函数 points() 可以在很多作图函数中用pch等参数实现,也可 以在用低层函数points()向已有图形中添加点时实现。后一种方法往往更灵 活自由。 points(x, y = NULL, type = "p", ...) ## 线 lines() ## 直线 abline() abline(a = NULL, b = NULL, h = NULL, v = NULL, reg = NULL, coef = NULL, untf = FALSE, ...) 其中,a是截距,b是斜率,h是画水平线时的纵轴值,v是画垂直线时 的横轴值,reg是一个能用函数coef()提取系数(包含斜率和截距)的R对象, 典型的就是用线性模型(回归)生成的对象,系数是一个长度为2的向量, 分别为截距和斜率;后面的...表示还可以传入其它参数(比如lty、col等)。 ## 线段 segments() segments(x0, y0, x1 = x0, y1 = y0, col = par("fg"), lty = par("lty"), lwd = par("lwd"), ...) 前四个参数表示线段的起点和终点坐标,后面的参数相信读者也都已 经熟悉。 箭头可以用函数arrows()生成,用法如下: ```{r} # 不作图,只画出框架,且指定坐标轴范围 plot(1:10, type = "n", xlim = c(0, 10), ylim = c(0, + 10)) # 10个正态随机数绝对值的波动线 lines(1:10, abs(rnorm(10))) # 不同的直线 abline(a = 0, b = 1, col = "gray") abline(v = 2, lty = 2) abline(h = 2, lty = 2) #添加文本 text(8, 3, "abline(a = 0, b = 1)") # 添加箭头 arrows(8, 3.5, 6, 5.7, angle = 40) # 参数用了向量:不同灰度的线段 segments(rep(3, 4), 6:9, rep(5, 4), 6:9, col = gray(seq(0.2, + 0.8, length = 4))) text(4, 9.8, "segments") ``` ## 箭头 arrows() arrows(x0, y0, x1 = x0, y1 = y0, length = 0.25, angle = 30, code = 2, col = par("fg"), lty = par("lty"), lwd = par("lwd"), ...) 类似于线段,前四个参数表示箭头的起点和终点坐标,length表示箭头 尖上短线的长度(单位:英寸),angle表示箭头尖短线的角度(默认为30 ) 8,code表示箭头的样式(整数1~3分别表示尾部箭头、首部箭头和两端都 带箭头),注意若length设置为0,那么将不会画出箭头(只有箭头线的主体 即一条线段)。 ## x样条 xspline() xspline(x, y = NULL, shape = 0, open = TRUE, repEnds = TRUE, draw = TRUE, border = par("fg"), col = NA, ...) 前两个参数给定点的位置,shape为样条的形状,取值在[-1, 1]之间, 当取值为负数时,曲线穿过给定的点,负值绝对值越小则曲线的角度越尖 锐,反之角度越圆滑,shape取值为正数时,曲线脱离给定的点,正值越小 越靠近给定点;open决定是否样条曲线封闭;repEnds为逻辑值,当样条曲 线不封闭时,该参数决定是否重复使用端点上的点;draw决定是否画线, 若为FALSE,则仅仅计算曲线的坐标位置而不画线;border为曲线的颜色; col为封闭曲线的填充颜色。图4.7为各种形状的X-样条,注意观察shape参数 与曲线形状的对应关系。 ## 矩形 rect(),多边形 polygon() rect(xleft, ybottom, xright, ytop, density = NULL, angle = 45, col = NA, border = NULL, lty = par("lty"), lwd = par("lwd"), ...) polygon(x, y = NULL, density = NULL, angle = 45, border = NULL, col = NA, lty = par("lty"), ..., fillOddEven = FALSE) 矩形函数的前四个参数分别制定左下角和右上角的坐标,用以确定矩 形的位置,同样,多边形函数的前两个参数给出一系列坐标点,用以围成 一个多边形;density参数设置阴影线的填充密度(每英寸填充多少条线), 如果设置了一个正值,那么颜色填充参数col将被忽略,只有当它被设置为 负数或NA或NULL时才可以填充颜色;angle参数设置填充线条的角度;col设 置填充颜色;border设置边框颜色,若设置为FALSE或NA,那么边框线将被 省略。 绘制多边形时要清楚它的过程:线条会随着横纵坐标点延伸,当走到 最后一点时,就会重新延伸回第一点,这就是多边形的绘制基本原理。一 般来说,大部分作图函数对于缺失数据都会默认省略不画,不会对图形造 成什么影响,而对于多边形函数,数据中的缺失将构成“分界点”,用以分 隔缺失点两端的点群,因此,若数据含缺失值,那么会有多个多边形被作 出来。这一点性质对与多边形的灵活运用也是很重要的,我们有时可以故 意设置缺失值,用以将图形分割为不同的区域。 ## 网格线 grid() grid(nx = NULL, ny = nx, col = "lightgray", lty = "dotted", lwd = par("lwd"), equilogs = TRUE) 可以看到,这个函数已经使用了一些默认的参数设置,例如将网格线 的颜色设置为浅灰色,线条样式设置为点线,这是一种比较美观的设置, 让网格线既不显得太突兀,又能达到辅助的效果;一般情况下,我们可以 直接使用不带参数的grid()函数添加网格。参数nx和ny分别表示横纵轴上网 格线的条数,颜色、线条样式和线条宽度参数不必再说明,最后equilogs参 数意思是,当坐标取了对数之后,是依然使用等距的网格线(TRUE)还是 根据对数函数使用不等距的网格线(FALSE)。 ## 标题,任意文本,周边文本 title()函数用来添加标题,text()函数用来向图形中任意位 置添加文本,mtext()函数用来向图的四条边上添加文本。 title(main = NULL, sub = NULL, xlab = NULL, ylab = NULL, line = NA, outer = FALSE, ...) text(x, y = NULL, labels = seq_along(x), adj = NULL, pos = NULL, offset = 0.5, vfont = NULL, cex = 1, col = NULL, font = NULL, ...) mtext(text, side = 3, line = 0, outer = FALSE, at = NA, adj = NA, padj = NA, cex = NA, col = NA, font = NA, ...) 若无特别设定,这些文本的样式都将根据当前的函数par()结果来设置, 比如颜色、字体等。函数title()的前四个参数就是主、副、x轴、y轴标题的 字符串,line设置一个距离图形边缘的行数(即:文本与图形边缘的距离 为line设置行高);outer表示是否将文本放在外边界中(参见3.1小节的说明); 函数text()的参数labels就是欲添加的文本(对应横纵坐标的设置,可以是 字符串向量),若不指定本参数,那么默认将以数字1:length(x)作为文本 标记添加到图中;adj与par()中说明相同;pos参数取值整数1~4分别表示文 本的位置在坐标点的下、左、上、右方,注意,它会覆盖参数adj的设置; offset参数会根据pos参数的取值将文本向相应的方向移动一定比例的距离; vfont参数用Hershey矢量字体来设置文本的字体式样,取值长度为2的向 量,第一个元素指定字体(Typeface),第二个元素指定式样(Style),关 于字体和式样的搭配种类,请查看帮助?Hershey,使用Hershey矢量字体 的优势在于: • Hershey字体会产生更好的输出,特别在计算机屏幕上,或者用于旋 转以及小字体时 • Hershey字体提供一些标准字体库没有的字体。如提供星座记号,地 图符号和天文学符号 • Hershey字体提供西里尔字符(cyrillic)和日语字符(假名和日本汉 字) 此外,等高线图中通常使用Hershey矢量字体以使等高线上的文本更清晰 好看,由于字体设置搭配内容体系比较庞大,因此感兴趣的读者请仔细阅 读帮助9;side参数取值为整数1~4分别把周边文本作在表示图形的下、左、 上、右边;其它参数基本已经都已经接触过,有些不常用的参数在此处省 略不讲。 ## 图例 ```{r} par(mar = c(4, 4, 4, 3)) plot(0:10, type = "n", xlab = "", ylab = "", xlim = c(0, 12)) grid(col = "gray") title(main = "Demonstration of text in R Graphics", xlab = "X-axis title", ylab = "Y-axis title") mtext("Here is \"side = 4\"", side = 4, line = 1) x = c(6, 4, 6, 8) y = c(8, 5, 2, 5) s = c(0, 90, 180, 270) for (i in 1:4) text(x[i], y[i], sprintf("srt = %d", s[i]), srt = s[i]) segments(c(6, 0, 6, 12), c(10, 5, 0, 5), c(0, 6, 12, 6), c(5, 0, 5, 10), lty = c(2, 1, 1, 2)) legend(-0.2, 9.8, c("Upper", "Lower"), lty = 2:1, cex = 0.8, bty = "n") ``` 用法: legend(x, y = NULL, legend, fill = NULL, col = par("col"), border = "black", lty, lwd, pch, angle = 45, density = NULL, bty = "o", bg = par("bg"), box.lwd = par("lwd"), box.lty = par("lty"), box.col = par("fg"), pt.bg = NA, cex = 1, pt.cex = cex, pt.lwd = lwd, xjust = 0, yjust = 1, x.intersp = 1, y.intersp = 1, adj = c(0, 0.5), text.width = NULL, text.col = par("col"), merge = do.lines && has.pch, trace = FALSE, plot = TRUE, ncol = 1, horiz = FALSE, title = NULL, inset = 0, xpd, title.col = text.col) x和y表示图例的坐标位置(左上角顶点的坐标)。 legend参数通常为一个字符向量,表示图例中的文字; fill参数指定一个与图例字符向量对应的颜色向量用以在文本左边绘制一个颜色填充方块; col参数设置图例中点和线的颜色; lty、lwd和pch参数指定图例中点线的样式; angle和density参数效果类似于fill参数,只是换成指定角度和密度的阴影线 填充方块; bty参数设置图例框的样式,很类似par()中的同名参数; title参数设定图例的标题; 剩余参数用来设置更细微的地方,不太常用。 ## 坐标轴 axis() axis(side, at = NULL, labels = TRUE, tick = TRUE, line = NA, pos = NA, outer = FALSE, font = NA, lty = "solid", lwd = 1, lwd.ticks = lwd, col = NULL, col.ticks = NULL, hadj = NA, padj = NA, ...) side参数与mtext()函数中的参数意思相类似,表示将坐标轴画 在哪条边上,事实上通过前面一些图形元素参数的讲解,读者应该能意识 到,R中上下左右方向的顺序一般都是“下、左、上、右”,分别用1、2、 3、4表示; at:参数表示在什么位置画坐标轴标记线; labels参数指定坐标轴刻度标记的字符。