投稿问答最小化  关闭

万维书刊APP下载

分享︱ R语言绘图—基础图形参数整理

2022/5/16 14:32:30  阅读:377 发布者:

继上一期的文章【干货丨零基础学习 R 语言?】小编在介绍了R语言基础入门(包括R的安装和载入、数据导入和导出方法等),在这一期小编继续为你挖掘R语言的巧妙用处,跟大家探讨如何创建和保存图形,如何修改图形中的特征如标题、坐标轴等。

Part 1

创建和保存图形

R是个图形构建平台,通常我们在交互式会话中可通过逐条输入语句构建图形,逐渐完善图形特征,直到获得自己想要的结果。例如,

attach(mtcars)

plot(wt, mpg)

abline(lm(mpg~wt))

title("Regression of MPG on Weight")

detach(mtcars)

第一句先绑定了数据框,第二句生成了一幅散点图,第三句向图形添加一条最优拟合曲线。第四句添加标题。第五句为数据框解除绑定。

所以,在R中,图形通常是以这种交互式的风格绘制的。

如果要通过代码保存图形,将绘图语句夹在开启目标图形设备的语句和关闭目标设备的语句之间即可。例如:

pdf("mygraph.pdf")

attach(mtcars)

plot(wt, mpg)

abline(lm(mpg~wt))

title("Regression of MPG on Weight")

detach(mtcars)

dev.off()

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

我们通过执行一些高级绘图命令(如plot()hist()boxplot())创建一幅新图形时,通常会覆盖先前的图形,那怎样才创建多个图形并随时查看每一个呢?有两种方法。

第一种方法,在创建一幅新图形前打开一个新图形窗口。

dev.new()

statements to create graph 1

etc...

第二种方法,使用函数dev.new()dev.next()dev.prev()dev.set()dev.off()同时打开多个图形窗口,并选择将哪个输出发送到哪个窗口中,这种方法适用于全平台。

R将在保证用户输入最小化的前提下创建尽可能美观的图形,不过我们仍然可使用图形参数指定字体、颜色、线条类型、坐标轴、参考线和标注。

Part 2

修改图形参数

当我们用R创建了一个新图形后,就可修改图形参数来自定义一幅图形的多个特征,如字体、颜色、坐标轴等。

修改图形参数的一种方法是通过函数par()来指定这些选项。调用格式如下:

par(optionname=value, optionname=name, …)

不加参数的话,执行par()会生成一个含有当前图形参数设置的列表。

添加参数no.readonly=TRUE会生成一个可修改的当前图形参数列表。

如,在一幅折线图上,假如我们想用实心三角作为点的符号,并且用虚线代替实现连接这些点。可用以下代码:

opar <- par(no.readonly=TRUE)

par(lty=2, pch=17)

plot(dose, drugA, type="b")

par(opar)

结果如图所示:

2.1

符号和线条

以下图形参数可指定绘图时使用的符合和线条类型。

参数     描述

pch       指定绘制点时使用的符号。

cex 指定符号的大小。cex是一个数值,表示绘图符号相对于默认大小的缩放倍数。默认大小为11.5表示放大为默认值的1.5倍,0.5表示缩小为默认值的50%

lty  指定线条类型。

lwd       指定线条宽度。lwd是以默认值相对大小来表示。

下图是参数pch可指定的绘图符号

对于○◇△▽□符号,可指定边界颜色col=和填充色bg=

下图是参数lty可指定的线条类型

2.2

颜色

下表显示用于指定颜色的参数

参数     描述

col

默认的绘图颜色。如linespie函数可接受一个含颜色值的向量并自动循环使用。如col=c(red, blue)并需绘制三条线,第一条是红色,第二条是蓝色,第三条是红色。

col.axis

坐标轴刻度文字的颜色。

col,lab

坐标轴标签(名称)的颜色。

col.main

标题颜色。

col.sub  副标题颜色。

fg

图形的前景色。

bg  图形的背景色。

R中,可通过颜色下标、颜色名称、十六进制的颜色值、RGB值或HSV值来指定颜色。

例如,col=1col=white”、col=#FFFFFF”、col=rgb(1, 1, 1)col=hsv(0, 0, 1)都是表示白色的等价方式。

函数rgb()基于红—绿—蓝三色值生成颜色,hsv()基于色相—饱和度—亮度值来生成颜色。

2.3

文本属性

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

以下是用于指定文本大小的参数:

参数

描述

cex 表示相对于默认大小缩放倍数的数值。

cex.axis

坐标轴刻度文字的缩放倍数。

cex.lab  坐标轴标签名称的缩放倍数。

cex.main

标题的缩放倍数。

cex.sub

副标题的缩放倍数。

以下是用于指定字体族、字号、字样的参数:

参数

描述

font

整数。用以指定绘图使用的字体样式。1=常规,2=粗体,3=斜体,4=粗斜体,5=符号字体。

font.axis      坐标轴刻度文字的字体样式。

font.lab 坐标轴标签名称的字体样式。

font.main     标题的字体样式。

font.sub       副标题的字体样式。

ps   字体磅值。文本最终大小为ps*cex

family   绘制文本时使用的字体族。标准的取值为serifsansmono

 

 

例如,执行这语句命令:

par(font.lab=3, cex.lab=1.5, font.main=4, cex.main=2)

创建的所有图形都会带有斜体、1.5倍于默认文本大小的坐标轴标签名称,以及粗斜体、2倍于默认文本大小的标题。我们可轻松设置字号和字体样式。

如果设置字体族就稍显复杂,因serifsansmono字体的具体映射是与图形设备相关。在windows系统中,mono字体映射为TT Courier Newserif字体映射为TT Times New Romansans字体映射为TT Arial。(TT表示True Type)。执行family=serif”参数就能获得以上这些映射。若执行windowsFont()则创建新的映射,可这样执行语句:

windowsFonts(

A=windowsFont (“Arial Black”),

B=windowsFont (“Bookman Old Style”),

C=windowsFont (“Comic Sans MS”)

)

mac系统上创新新映射则用quartzFonts()

对于以PDF格式输出图形,用names(pdfFonts())找出系统中有哪些字体可用,再用pdf (file=myplot.pdf, family=fontname)来生成图形。

2.4

图形尺寸与边界尺寸

下面列出的参数来控制图形尺寸和边界大小。

参数

描述

pin

以英寸表示的图形尺寸(宽、高)。

mai

以数值向量表示的边界大小,顺序是下、左、上、右,单位是英寸。

mar

以数值向量表示边界大小,顺序是下、左、上、右,单位是英分。

我们来看这组代码:

par(pin=c(4,3), mai=(1, .5, 1, .2))

可生成一幅4英寸高、3英寸高、上下边界为1英寸、左边界为0.5英寸、右边界为0.2英寸的图形。

现在我们了解完如何在R修改图形参数,下面我们来了解一下自定义文本标注和坐标轴。

Part 3

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

其实还有很多高级绘图函数(plothistboxplot)可以自定义坐标轴和文本标注选项。

例如,下面代码在图形上添加了标题、副标题、坐标轴标签,还指定坐标轴范围。

opar <- par(no.readonly=TRUE)

par(lty=2, pch=17)

plot(dose, drugA, type="b")

par(opar)

plot(dose, drugA, type="b", lty=2, pch=17)

plot (dose, drugA, type="b",

col="red", lty=2, pch=2, lwd=2,

main="Clinical Trials for Drug A",

sub="This is hypothetical data",

xlab="Dosage", ylab="Drug Response",

xlim=c(0, 60), ylim=c(0, 70))

结果如图所示:

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

3.1

标题

我们可用title()函数为图形添加标题和坐标轴标签。

title(main="main title", sub="sub=title",

xlab="x-axis label", ylab="y=axis label")

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

3.2

坐标轴

我们可用函数axis()创建自定义的坐标轴,

axis(side, at=,  labels=, pos=, lty=, col=, las=, tck=, …)

自定义坐标轴的参数如下:

参数

描述

side

整数。表示在图形的哪边绘制坐标轴,1=下,2=左,3=上,4=右。

at

数值型向量。表示需要绘制刻度线的位置。

labels

字符型向量。表示置于刻度线旁边的文字标签。

pos

坐标轴线绘制位置的坐标。

lty

线条类型。

col

线条和刻度线颜色。

las

标签是否平行于(=0)或垂直于(=2)坐标轴。

tck

刻度线长度,以相对于绘图区域大小的分数表示,默认值=-0.01。负值=在图形外侧,正值=在图形内侧,0=禁用刻度,1=绘制网格线。

 

如果创建自定义坐标轴时,就应当禁用高级绘图参数自动生成的坐标轴。

axes=FALSE禁用全部坐标轴,包括坐标轴框架线

xaxt=n”和yaxt=n”分别禁用X轴或Y轴,只去除刻度,保留框架线。

如要创建次要刻度线,我们需要使用Hmisc包中的minor.tick()函数。

安装Hmisc包所需使用的代码:

library(Hmisc)

minor.tick(nx=n, ny=n, tick.ratio=n)

nxny分别指定X轴和Y轴每两条主刻度线之间通过次要刻度线划分得到的区间个数。

tick.ratio表示次要刻度线相对于主刻度线的大小比例。

3.3

参考线

abline()用来为图形加上参考线。也可指定线条类型、颜色和宽度。

abline (h=yvalues,  v=xvalues)

3.4

图例

有时候我们创建一个图形时数据不止一组,那这时就需要用图例辨别每个条形、扇形区域或折线各代表哪一类数据。我们使用legend()加上图例。

legend(location,  title,  legend, …)

用于表示图例的参数如下:

参数

描述

location

指定图例的位置。可直接给定图例左上角的xy坐标,也可执行locator(1),然后通过鼠标单击给出图例的位置,还可善用关键字bottombottomleftlefttoplefttoptoprightrightbottomrightcenter放上图例。

title

图例标题的字符串。

 

legend  图例标签组成的字符型向量。

bty

指定盒子样式的。

 

bg

指定背景色的。

 

cex

指定大小的。

text.col 指定文本颜色的。

3.5

 

文本标注

我们可通过函数text()mtext()将文本添加到图形上。

参数

描述

text()    可以向绘图区域内部添加文本。

mtext()

可以向图形的四个边界之一添加文本。

 

location       文本的位置参数。

pos 文本相对于位置参数的方位。1=下,2=左,3=上,4=右。

side       指定用来放置文本的边。1=下,2=左,3=上,4=右。

cex

调整字号。

col

调整颜色。

font

调整字体样式。

text (location, “text to place”, pos, …)

mtext (“text to place”, side, line=n, …)

我们来看这个示例:

attach(mtcars)

plot(wt, mpg,

main="Mileage vs. Car Weight",

xlab="Weight", ylab="Mileage",

pch=18, col="blue")

text(wt, mpg,

row.names(mtcars),

cex=0.6, pos=4, col="red")

detach(mtcars)

在这里,我们针对数据框mtcars提供的32种车型的车重和每加仑汽油行驶英里数绘制散点图,text()用于在各个数据点右侧添加车辆型号。各点的标签大小缩小了40%,颜色是红色。

Part 4

组合图形

R中使用par()layout()可容易组合多幅图形为一幅图。

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

例如,我们用下面代码创建四幅图形并将它排列在两行两列中。

attach(mtcars)

opar <- par(no.readonly=TRUE)

par(mfrow=c(2,2))

plot(wt,mpg, main="Scatterplot of wt vs. mpg")

plot(wt,disp, main="Scatterplot of wt vs disp")

hist(wt, main="Histogram of wt")

boxplot(wt, main="Boxplot of wt")

par(opar)

detach(mtcars)

结果如图所示:

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

attach(mtcars)

layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE))

hist(wt)

hist(mpg)

hist(disp)

detach(mtcars)

为了要精确控制每幅图形大小,可选择地在layout()函数中使用widths=heights=两个参数。

相对宽度可直接通过数值指定,绝对宽度(以厘米为单位)可通过函数lcm()来指定。

有时候,你想通过排布或叠加若干图形来创建单幅的、有意义的图形,这就要需要对图形布局进行控制。我们可以用图形参数fig=完成,我们来看看这个例子。

opar <- par(no.readonly=TRUE)

par(fig=c(0, 0.8, 0, 0.8))

plot(mtcars$wt, mtcars$mpg,

xlab="Miles Per Gallon",

ylab="Car Weight")

par(fig=c(0, 0.8, 0.55, 1), new=TRUE)

boxplot(mtcars$wt, horizontal=TRUE, axes=FALSE)

par(fig=c(0.65, 1, 0, 0.8), new=TRUE)

boxplot(mtcars$mpg, axes=FALSE)

mtext("Enhances Scatterplot", side=3, outer=TRUE, line=-3)

par(opar)

结语

以上介绍了用R创建图形和保存图形的方法和用R语言修改默认图形的方法,同时也介绍了如何在图形添加标题、文本等。对于生信小白来说,要勤加练习,通过各种各样方法灵活实现不同的可视化效果。在下一期小编将介绍R语言的统计函数应用,欢迎大家继续关注本公众号。

来源:南博屹生物

转自:斐然智达SCI学术服务

 

如有侵权,请联系本站删除!


  • 万维QQ投稿交流群    招募志愿者

    版权所有 Copyright@2009-2015豫ICP证合字09037080号

     纯自助论文投稿平台    E-mail:eshukan@163.com