美文网首页科研信息学
(五)基本图形参数

(五)基本图形参数

作者: 井底蛙蛙呱呱呱 | 来源:发表于2018-03-31 20:53 被阅读520次

    统计分析与可视化是R语言最强的两个点。本节简要介绍一些R基础绘图中的参数。
    R图形可设置的参数很多,大概可以分为以下几大部分:

    1. 图像的保存。不同类型的保存大致步骤相同,如保存为pdf文件pdf(filename);plot(画图过程);dev.off(),当然也可以通过rstudio里面的选项直接导出图片;
    2. 图像的全局参数设置。 图形的参数如线条、性状、坐标轴等都可以通过函数par()设置,如opar<-par(no.readonly=TRUE);par(lty=2);plot(画图过程);par(opar),参数no.readonly=TRUE可以生成一个可以修改的当前图形参数列表。。当然这些参数除了在全局函数par()中进行设置,也可以在绘图过程中进行设置。图形参数主要包括:符号、线条、颜色、文本参数、图形尺寸及边界等;
    3. 添加文本,自定义坐标轴和图例。标题和坐标轴名称主要通过title()函数进行设置,坐标轴细节(如范围、颜色、标签等)主要通过axis()函数进行设置,次坐标轴可通过Hmisc包进行设置,图例可通过legend进行设置;
    4. 文本标注。添加文本主要是通过text()mtext()函数进行设置,数学标注可使用plotmath();
    5. 图形组合。图形组合有三种设置方式:(1)par()函数通过设置mfrowmfcol将画布进行分割;(2)layout()函数也可以对画布进行分割;(3)若需要更为精细的对图形布局进行控制,则需要使用到par()中的fig参数。

    下面详细的介绍这些参数。

    1、图形参数

    1.1 符号和线条
    参数 描述
    pch 点的符号
    cex 指定符号大小,表示与默认的相对大小,如1.5表示为默认的1.5倍
    lty 线条类型
    lwd 线条宽度,同样以默认值的相对大小来表示,如2表示为默认大小的2倍

    pch符号代码如下图:

    pch可选参数 lty可指定的线条类型如下: lty类型
    1.2 颜色

    在R中可以通过颜色名称、RGB、颜色值等多种方式来指定颜色。函数colors可返回所有可用颜色名称。此外,rainbow()heat.colors()等多种函数可以指定连续颜色。用于指定颜色的参数如下表:

    参数 描述
    col 默认的绘图颜色
    col.axis 坐标轴刻度文字(标签)的颜色
    col.lab 坐标轴名称的颜色
    col.main 主标题的名称
    col.sub 副标题的名称
    fg 前景色
    bg 背景色
    1.3 文本属性

    文本属性主要包括字体大小、样式等。指定文本大小参数如下表所示:

    参数 描述
    cex 相对于默认的放大缩小倍数
    cex.axis 坐标轴刻度的放大缩小倍数
    cex.lab 坐标轴名称放大缩小倍数
    cex.main 图片标题放大缩小倍数
    cex.sub 图片副标题放大缩小倍数

    指定文字样式的参数,如par(font.lab=3, cex.lab=1.5, font.main=4, cex.main=2)

    参数 描述
    font 指定字体样式,1=常规,2=粗体,3=斜体,4=粗斜体,5=符号字体(以Adobe 符号编码表示)
    font.axis 坐标刻度标签的字体样式
    font.lab 坐标轴名称的字体样式
    font.main 标题的样式
    font.sub 副标题的样式
    ps 字体磅值,最终大小为ps*cex
    family 绘制文本时使用的字体族。标准的取值为serif(衬线)、sans(无衬线)和mono(等宽)
    1.4 图形尺寸与边界

    使用下面的参数可以控制图形尺寸和边界大小,如par(pin=c(4, 3), mai=c(1, 0.5, 1, 0.2))

    参数 描述
    pin 以英寸表示图形的图形尺寸
    mai 以数值向量表示的边界大小,顺序为下左右上,单位为英寸
    mar 以数值向量表示边界大小,顺序为下左上右,单位为英分。默认值为c(5,4,4,2)+0.1

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

    许多高级函数(如plot、hist、boxplot等)包含了默认的设置标题和坐标轴标签,若想另行设置需在高级函数或par()中设置anno=FALSE来移除他们。

    2.1 标题

    使用title()函数可以对主标题、副标题、坐标轴标题进行设置,包括标题文本颜色大小等。如:

    title(main='my title', sub='my subtitle', xlab='my xlab', ylab='my ylab', col.lab='blue', cex.lab=0.75)
    
    2.2 坐标轴

    使用axis()来创建自定义的坐标轴,而非R的默认坐标轴,格式为:axis(side, at=,labels=,pos=,lty=,col=,las=,tck=,...)

    参数 描述
    side 设置在图形哪边绘制坐标轴(1=下,2=左,3=上,4=右)
    at 数值型向量,表示绘制坐标轴刻度的位置
    labels 刻度线标签,默认为at中的值
    pos 两坐标轴相交的位置
    lty 线条类型
    col 线条和刻度线颜色
    las 刻度线标签平行(=0)还是垂直(=2)于坐标轴
    tck 刻度线的长度,以相对于绘图区域大小的分数表示(负值表示在图形外侧,正值表示在图形内侧, 0表示禁用刻度, 1表示绘制网格线);默认值为-0.01

    需要注意的是,创建自定义坐标轴时,应当禁用高级绘图函数自动生成的坐标轴。参数axes=FALSE将禁用全部坐标轴(包括坐标轴框架线,除非你添加了参数frame.plot=TRUE)。参数xaxt="n"yaxt="n"将分别禁用X轴或Y轴(会留下框架线,只是去除了刻度)。
    若需要绘制次要刻度线,则需要用到Hmisc包的minor.tick()函数。

    2.3 参考线

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

    ###在y=1,2,3处设置水平参考线
    abline(h=c(1,2,3))
    ###在x=1,2,3处设置竖直参考线
    abline(v=c(1,2,3), lty=2, col=''blue)
    
    2.4 图例

    使用legend可以为我们的图形添加图例,legend(location, title, legend).

    参数 描述
    location 有许多方式可以指定图例的位置。你可以直接给定图例左上角的x、 y坐标,也可以执行locator(1),然后通过鼠标单击给出图例的位置,还可以使用关键字bottom、 bottomleft、left、 topleft、 top、 topright、 right、 bottomright或center放置图例。如果你使用了以上某个关键字,那么可以同时使用参数inset=指定图例向图形内侧移动的大小(以绘图区域大小的分数表示)
    title 图例标题(可选)
    legend 图例标签组成的字符型向量
    ... 其他选项。如果图例标示的是颜色不同的线条,需要指定col=加上颜色值组成的向量。如果图例标示的是符号不同的点,则需指定pch=加上符号的代码组成的向量。如果图例标示的是不同的线条宽度或线条类型,请使用lwd=或lty=加上宽度值或类型值组成的向量。要为图例创建颜色填充的盒形(常见于条形图、箱线图或饼图),需要使用参数fill=加上颜色

    其他常用的图例选项包括用于指定盒子样式的bty、指定背景色的bg、指定大小的cex,以及指定文本颜色的text.col。指定horiz=TRUE将会水平放置图例,而不是垂直放置。

    2.5 文本标注

    图形的文本标注主要使用text()mtext()

    text(location, 'text', pos, ...)
    mtext('text', side, line=n, ...)
    
    参数 描述
    location 文本的位置参数。可为一对x,y坐标,也可通过指定location为locator(1)使用鼠标交互式地确定摆放位置
    pos 文本相对于位置参数的方位。1=下,2=左,3=上,4=右。如果指定了pos,就可以同时指定参数offset=作为偏移量,以相对于单个字符宽度的比例表示
    side 指定用来放置文本的边。 1=下, 2=左, 3=上, 4=右。你可以指定参数line=来内移或外移文本,随着值的增加,文本将外移。也可使用adj=0将文本向左下对齐,或使用adj=1右上对齐

    对于数学标注,可以使用plotmath()函数。

    3、图形组合

    R图形组合有三种方法par(mfrow=...)layout()par(fig=...)

    3.1 par(mfrow=...)

    使用par()中的mfrow=c(nrows, ncols)mfcol=c(nrows, ncols)可以快速创建nrows行ncols列的图形矩阵。

    opar <- par(no.readonly=TRUE)
    par(mfrow=c(2,2))   #将图形分为2行2列
    plot(...)  #绘制第一个图
    plot(...)   #第二
    plot(...)   #第三
    plot(...)  #绘制最后一个图
    par(opar)
    
    3.2 layout()

    函数layout()的调用形式为layout(mat),其中的mat是一个矩阵,它指定了所要组合的多个图形的所在位置。

    attach(mtcars)
    ###将画布分为三部分,第一部分为一行,另两部分平分另一行
    layout(matrix(c(1,1,2,3), 2,2, byrow=TRUE))
    hist(mpg)   #第一个图独占第一行
    hist(gear)  #第二个图位于第二行左半部
    hist(disp)    #第三个图位于第二行右半部
    detach(mtcars)
    

    为了更精确地控制每幅图形的大小,可以有选择地在layout()函数中使用widths=和heights=两个参数。其形式为:widths = 各列宽度值组成的一个向量, heights = 各行高度值组成的一个向量。widths和heights中的向量数值都可以通过相对值指定。
    layout()函数能够让我们轻松地控制最终图形中的子图数量和摆放方式,以及这些子图的相对大小。

    attach(mtcars)
    ###同样将图分为3部分,只是第这三部分所占比例各不相同
    layout(matrix(c(1,1,2,3),2,2,byrow=TRUE), widths=c(3,1), heights=c(1,2))
    hist(mpg)   # 第一个图独占一行,高度占总高度1/3(heights=c(1,2))
    hist(gear)  # 第二个图在第二行左边,高度占总高度2/3, 宽度占行宽的3/4(widths=c(3,1))
    hist(disp)  # 第三个图在二行右边,高度占总高度2/3, 宽度占行宽的1/4(widths=c(3,1))
    detach(mtcars)
    
    3.3 par(fig=....) 图形的精确控制

    fig参数使我们能够精确的排布各个图形的位置,将各个图形进行叠加。

    > opar<-par(no.readonly = T)
    ###设置第一幅图的位置, X和Y轴范围都为(0,0.8)
    > par(fig=c(0,0.8,0,0.8))
    > plot(mtcars$wt, mtcars$mpg, xlab='MPG', ylab='Weight')
    ### 设置第二幅图,X轴范围为(0,0.8),Y轴范围为(0.55, 1)
    > par(fig=c(0,0.8,0.55, 1), new=T)   #注意这里的new参数一定要设置
    > boxplot(mtcars$wt,horizontal = T,axes=F)   #axes=F, 这里将所有的箱线图的坐标轴取消了
    ###设置第三幅图的位置,X轴范围为(0.65, 1),Y轴范围(0,0.8)
    > par(fig=c(0.65, 1, 0, 0.8), new=T)
    > boxplot(mtcars$mpg,axes=F)
    ###在上方添加文本
    > mtext("Enhanced scatterplot", side=3,outer=T,line=-3)
    ###添加标题,看图可以知道这时标题并非整个图的标题,而是第三幅图的标题
    > title(main="hellow world!")
    

    要理解这幅图的绘制原理,请试想完整的绘图区域:左下角坐标为(0,0),而右上角坐标为(1,1)。下图是一幅示意图。参数fig=的取值是一个形如c(x1, x2, y1, y2)的数值向量。

    另外值得注意的是,各独立子图所需空间的大小可能与设备相关。如果遇了“Error in plot.new(): figure margins too large”这样的错误,尝试在整个图形的范围内修改各个子图占据的区域位置和大小。

    参考:
    R语言实战.

    相关文章

      网友评论

        本文标题:(五)基本图形参数

        本文链接:https://www.haomeiwen.com/subject/ddigcftx.html