R语言|plot和par函数绘图详解,绘图区域设置 颜色设置 绘图后修改及图像输出

plot()函数
plot()函数是R中最基本的绘图函数,其实最简单、最基础的函数,这也就意味着其具有更多的可操作性。

plot(x,y,...)

在plot函数中,只需指定最基本的x和y轴对应数据即可进行图像的绘制,x和y轴数据分别为两个向量或者是只有两列的数据框(第一类为x轴,第二列为y轴)。

require(stats)
plot(cars)

 

 plot绘图默认为散点图,可以通过type参数修改绘图的类型

type=”s”是先水平后垂直,type=”S”是先垂直后水平,type=”n”为不显示图像。

par()函数
plot()函数中的所有绘图参数基本上都是应用par()函数中的参数进行设置,接下来就详细介绍par()函数中可以设置的绘图参数。

par(..., no.readonly = FALSE)

其中…表示所有类似于tag=value形式的参数,下面会具体的对这些参数进行描述。

当参数no.readonly=TRUE时,函数par()就只允许有这一个参数了,并且会返回当前绘图设备中各个参数的参数值。

如只输入par()则会返回一个list,其中包含当前的图形参数。

各参数意义:

adj,该参数值用于设定在text、mtext、title中字符串的对齐方向,0表示左对齐,0.5(默认值)表示居中,而1表示右对齐。

 

 

ann,如果ann=FALSE,那么高水平绘图函数会调用函数plot.default使对坐标轴名称、整体图像名称不做任何注解,默认值为TRUE。

 

plot(1:4,ann=FALSE,main='plot(1:4,ann=FALSE)')

 

尽管指定了参数main的值,但是图像中仍然没有显示。

ask,逻辑值,若为TRUE(且当前的R会话是可交互状态),则在绘制新图像之前会要求用户输入确认信息。

bg,用于设定绘图区域的背景颜色。

bty,该参数值为字符串型,用于限定图形的边框类型。如果bty的值为”o”(默认值)、”l”、”7”、”c”、”u”或者”]”中的任意一个,对应的边框类型就和该字母的形状相似,如果bty的值为”n”,表示无边框。

 

cex,用于表示对默认的绘图文本和符号放大多少倍。

cex.axis,表示在当前的cex设定情况下,对坐标轴刻度值字体的放大倍数;

cex.lab,表示在当前的cex设定情况下,对坐标轴名称字体的放大倍数;

cex.main,表示在当前的cex设定情况下,对主标题字体的放大倍数;

cex.sub,表示在当前的cex设定情况下,对子标题字体的放大倍数。

cin、cra、cxy,设置字符的大小,cin的单位为英寸,cra的单位为pixels,cxy的单位为用户坐标轴的单位。

col,用于设定默认的绘图颜色。

col.axis,坐标轴刻度值的颜色,默认为”black”;

col.lab,*坐标轴名称8的颜色,默认为”black”;

col.main,主标题的颜色,默认为”black”;

col.sub,子标题的颜色,默认为”black”。

crt,该参数的值为一个表示度数的数值,用于表示单个字符的旋转度数。

family,图形中字符的字体类型。

fg,图形中显著位置的颜色(如坐标轴、刻度线,边框等),一般默认为”black“。

font,用于设定采用哪种字型,为一个整数。

font.axis,坐标轴刻度值的字型;

font.lab,坐标轴名称的字型;

font.main,主标题的字型;

font.sub,子标题的字型。

 

1代表纯文本,2表示黑体,3表示斜体,4表示黑色斜体

las,只能是0,1,2,3中的某一个值,用于表示刻度值的方向

 

 

0表示总是平行于坐标轴,1表示总是水平方向,2表示总是垂直于坐标轴,3表示总是垂直方向。

lend,定义线的末端形式,0或round为圆滑末端,1或butt末端会有一个放大的圆点,2或square为直角末端。

ljoin,定义线的连接形式,0或round为圆滑连接,1或mitre为斜切连接,2或bevel为齿轮连接。

lmitre,当线为mitred连接时,设置mitre的个数,必须超过1。

lheight,设定多行文本的行距。

lab,为c(x,y,len)格式的数字向量,x和y分别定义x和y轴上刻度的个数,len定义标签的长度,默认为c(5,5,7)。

lty,直线类型。

 

lwd线条宽度,必须为一个整数,默认值为1。

mgp,设定标题、坐标轴名称、坐标轴距图形边框的距离,默认值为c(3,1,0),其中第一个值影响的是标题。

mkh,定义图像中symbols的大小,单位为英寸。

pch,表示点的形状

 

pin,当前的维度,形式为c(width,height),单位为英寸。

ps,整数,设置图像中点对应的文字大小。

srt,字符串旋转度数,只支持函数text。

tck,坐标轴刻度线的长度,为一个小于等于1的小数,表示绘图区域的高度或宽度的一部分(取高度或宽度中较小的值),如果tck=1,则表示绘制网格线。默认值为NA(相当于tcl=-0.5)

xaxs、yaxs,坐标轴的间隔设定方式,”r”(regular)首先会对数值范围向两端各延伸4%,然后在延伸后的数值区间中设置坐标值,”i”(internal)直接在原始的数据范围中设置坐标值。

xaxt、yaxt,用于设定坐标轴的刻度值类型,为一个字符,“n”表示不绘制刻度值及刻度线,”s”表示绘制,默认为”s”。

xlog、ylog,一个逻辑值。如果为TRUE,表示对坐标轴进行对数处理,默认值为FALSE。

绘图区域设置
​开始绘制一张图像之前,首先要做的就是定义绘图区域,以确定图像绘制的位置及各个元素的分布。

 

par()函数中除了用于绘图元素的参数之外,还有一些是针对绘图区域设置的参数。

mai,数字向量,格式为c(bottom, left, top, right),以英寸为单位定义绘图区边缘空白大小。

mar,数字向量,格式为c(bottom, left, top, right),给出各个方向绘图区边缘空白的大小,默认为c(5, 4, 4, 2) + 0.1。

mfg,c(i,j)形式的数字向量,定义在一个图标列阵中,哪一个位置是下一个图的生成位置。

new,逻辑值,默认值为FALSE,如果设定为TRUE,那么下一个高级绘图命令会清空当前绘图设备。

oma、omi,参数形式为c(bottom, left, top, right) ,用于设定外边界。

page,定义是否下一个图形生成在一个新的页面。

plt,形式为 c(x1, x2, y1, y2),设定当前的绘图区域。

pty,一个字符型参数,表示当前绘图区域的形状,”s”表示生成一个正方形区域,而”m”表示生成最大的绘图区域。

xpd,如为FALSE,则所有的内容均在plot区域中显示,即坐标轴以内,如为TRUE,则所有的内容在绘图区显示,及margin内,如果NA,则所有的内容在任何区域均可。

mai与mar以及oma和omi之间的区别只是所用的单位不同。

通常情况下常用的参数只有mar和xpd,在进行图像绘制之前输入如下命令:

par(mar = c(4,2,2,1),xpd = TRUE)
mar设置绘图区域边界大小,xpd图像元素可以在边界内出现,如果xpd为FLASE,可能会导致部分图像显示不全。

页面布局
在很多情况下,我们都希望在一副图中展示多个图像,这就涉及到对绘图区域进行分隔和布局。

par()函数中的mfcol、mfrow,用于设定图像设备的布局,参数形式为c(nr, nc),子图的绘图顺序是按列还是按行就分别根据是参数指定的是mfcol还是mfrow。

par(mfcol = c(3,3))

 par(mfrow = c(3,3))

 

mfcol和mfrow设置绘图区域的布局有一个问题,就是只能将绘图区域分成大小相等的子区域,但是我们可能希望不同的子图像所占据的绘图区域大小不一致,这时可以使用layout()函数。

layout(mat, widths = rep.int(1,ncol(mat)),
heights = rep.int(1,nrow(mat)),respect = FALSE)
参数详解:

mat,layout通过一个矩阵设置绘图窗口的划分;

widths,设置不同列的宽度;

heights,设置不同行的高度。

mat矩阵应用整数指定绘图区域划分和绘制的先后顺序,0表示该位置不画图,其它数值必须为从1开始的连续整数。

layout(matrix(1:6,2,3))

默认条件下,layout同样是将绘图区平均划分。

layout(matrix(c(1,2,3,0,2,3,0,0,3),nr = 3))

 

 

通过0元素和其它数值的重复定义不同绘图区的形状。

layout(matrix(1:4,2,2),widths = c(1,2),heights = c(2,1))

 

 

通过widths和heights定义不同行和列的长宽比。

R语言中的颜色
R语言绘图中与颜色相关的参数:

col,绘图使用的颜色;

col.axis,坐标轴字符颜色;

col.lab,x,y坐标标题颜色;

col.main,标题颜色;

col.sub,副标题颜色;

fg,绘图前景色,包括坐标轴,各类boxes;

bg,绘图背景色。

可以直接通过颜色的名字或十六进制标识指定绘图所需的颜色,如需要指定颜色的元素是多个时,将颜色输入为一个向量,之后依次匹配颜色。

d <- data.frame(x = c(1:10),y = rnorm(10))
#设置点的颜色为红色
plot(d, col = "red", pch = 19, cex = 2)

 

自定义颜色
除了直接输入颜色的名字之外,R还支持颜色的自定义。

rgb()函数
rgb(red, green, blue, alpha, names= NULL, maxColorValue = 1)
rgb()函数利用红绿蓝三色定义一种新的颜色,red、green、blue3个参数分别制定3个颜色的成分,数值在0至maxColorValue之间,数值越大表示颜色的成分越高。

alpha表示透明度,数值同样在0至maxColorValue之间,0表示完全透明,最大值表示完全不透明。

names指定生成颜色的名称。

hsv()函数
hsv(h = 1, s = 1, v = 1, gamma = 1, alpha)
h、s、v三个参数分别对应色调、饱和度和纯度,取值于区间[0, 1]。

参数gamma表示伽玛校正3(Gamma Correction)。

alpha代表透明度,取值在区间[0,1]上。

hcl()函数
hcl(h = 0, c = 35, l = 85, alpha, fixup = TRUE)
h取值在区间[0,360]上,可以将它想象为一个角度:0表示红色,120表示绿色,240表示蓝色,中间的都是过渡色。

l取值在区间[0, 100]上,取值越大生成的颜色越亮。

c取值受h和l限制,alpha表示透明度。

fixup表示是否修正生成的颜色值,之所以要修正,是因为有些搭配生成的RGB颜色(r, g, b)可能出现某一个元素超过1的情形。

gray()函数
gray(level)
gray()函数只有一个level参数,表示灰度水平,取值在0~1之间,0表示纯黑色,1表示纯白色。

连续梯度颜色
除了指定与有限参数匹配的颜色之外,有时还需要指定一个连续的颜色变化以表示数值在指定区间内的位置。

#彩虹色
rainbow(n, s = 1, v = 1, start = 0, end= max(1, n - 1)/n, gamma = 1)
#从红色渐变到黄色再变到白色
heat.colors(n, alpha = 1)
#从绿色渐变到黄色再到棕色最后到白色
terrain.colors(n, alpha = 1)
#从青色渐变到白色再到粉红色
topo.colors(n, alpha = 1)
#从蓝色渐变到青色再到黄色最后到棕色
cm.colors(n, alpha = 1)

 

 

 

 

n设定颜色梯度中色块的数目,aplha表示透明度。

彩虹色设置中,start和end代表颜色的起始和终止,红色(red)为0,黄色(yellow)为1/6、绿色(green)为2/6、青色(cyan)为3/6,蓝色(blue)为4/6,紫色(magenta)为5/6.

RColorBrewer
除了手动设置颜色以外,R还提供了一系列设置好的配色方案已备用户使用,其中使用最为广泛的就是RColorBrewer包。

install.packages("RColorBrewer")
library(RColorBrewer)
RColorBrewer包提供了多个设置好的配色方案,使用brewer.pal()函数调用。

 

brewer.pal(n,names)
n为需要颜色的个数,names为配色方案的名称。

data <- replicate(8,rnorm(10, 10, sd = 1.2))
#调用Set3配色的前8个颜色
boxplot(data, col= brewer.pal(8,"Set3"))

 

当需要的颜色数目大于配色方案给出的颜色数目时,使用colorRampPalette()命令自动生成不足的颜色。

#对之前生成的数据进行统计,形成新的数据表
data1 <- table(round(data))
#制作配色方案
col1 <- colorrampPalette(brewer.pal(8,"Dark2))(length(data1))
#使用新的配色方案绘图
pie(data1, col = col1)

 

如只想选择配色方案中的一个特定颜色,可以使用[]进行指定,[]内为指定颜色在配色方案中的位置。

col2 <- brewer.pal(9,"Set3)[6]
绘图后修改
通常我们使用基本的绘图命令得到的基本图像并不能让我们满意,这就需要在基本图形的基础上对各个元素进行修改,主要涉及的内容基本上就是坐标轴、文字、图例或添加指示符号等等,今天主要介绍这些元素修改的命令及其中个参数的意义,大家可以收藏一波方便以后查找,在接下来的推文中会以实例的方式详细介绍各个命令的使用情况和使用方法。

坐标轴
axis(side,at=,labels=,pos=,lty=,col=,las=,tck=,……)
各参数意义:

side,一个整数,表示在图形的哪边绘制坐标轴,1、2、3、4分别对应下、左、上、右;

at,一个数值型向量,表示需要绘制刻度线的位置;

labels,标志至于刻度线旁边的文字标签;

pos,坐标轴与另一个坐标轴相交位置的值;

lty,坐标轴的线型

col,轴和刻度线的颜色

las,标签是水平(=0)还是垂直(=2)于坐标轴;

tck,刻度线的长度,以相对于绘图区域大小的分数表示。

axis()函数只能设置一种刻度线,但有时我们希望同时展示主要和次要两种刻度线,此时可以使用Hmis包的minor.tick()函数。

library(Hmisc)
#载入包
minor.tick(nx=n,ny=n,tick.ration=n)
各参数意义:

nx和ny分别指定x和y轴每两条主刻度线之间通过次刻度线划分得到的区域个数;

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

文字
标题修改

title(main = NULL, sub = NULL, xlab = NULL, 
ylab = NULL, line = NA, outer = FALSE, ...)
各参数意义:

main为主标题的内容;

sub为副标题的内容;

xlab和ylab为x和y轴标题的内容;

line定义标题绘制与默认位置的距离;

outer定义是否标题绘制在图像边缘的外侧;

轴标题的修改

有时我们可能只希望修改x或y轴中的某一个,或者在绘制双横/纵轴图像时在图像上方或右侧添加轴标题,此时可以使用mtext()函数。

mtext(text, side = 3, line = 0, outer = FALSE, 
at = NA, adj = NA, padj = NA, cex = NA, col = NA, 
font = NA, ...)
各参数意义:

text为需要添加的文字;

side文字添加的位置,1为底部、2为左侧,3为右侧,4为顶部;

line文字距离边界的距离,outer定义是否使用外部边界;

at定义文字添加的坐标,adj文字的对齐方式;

padj定义文字的阅读方向;

cex、col和font定义文字的大小、颜色和字号。

在指定位置添加文字

text(x, y = NULL, labels = seq_along(x), 
adj = NULL, pos = NULL, offset = 0.5, 
vfont = NULL, cex = 1, col = NULL, 
font = NULL, ...)
各参数意义:

x和y定义添加文字的x和y轴坐标;

labels定义添加的文字;

adj定义标签的对齐方式,0为左对齐,1为右对齐;

pos应用数字调整文字相对于绘图坐标的位置;

offset如果pos被指定,此命令指定标签字符的宽度;

vfont定义文字标签的字体;

cex、col和font分别为文字的大小、颜色和字号。

图例
在R的基本语法中,图例使用legend()命令进行设置。

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"),
text.font = NULL, merge = do.lines && has.pch, 
trace = FALSE, plot = TRUE, ncol = 1, horiz = FALSE, 
title = NULL, inset = 0, xpd, title.col = text.col, 
title.adj = 0.5, seg.len = 2)

各参数意义:

x,y定义图例在绘图区中的位置,可以为x/y坐标,也可以是bottomright、bottom、bottomleft、left、topleft、top、topright、right和center中的一个;

legend为在图例中显示的内容,可以是字符串,也可以是长度大于1的expression向量;

fill定义是否在图例的文字旁边显示一个颜色填充的方块,根据图形中的颜色来区分不同的内容;

col定义图例中点或线的颜色;

border定义颜色填充方块的轮廓颜色;

lty和lwd定义图例中线的线型和宽度;

pch定义图例中的symbols,与图像中的symbols对应;

angle定义图例中阴影线的角度;

density定义隐形线的密度

bty定义图例边框的类型,参数为o或n;

bg定义图例的背景颜色,只有在bty为o时可用;

box.lwd、box.lty、box.col定义图例边框的宽度、线型和颜色,只有在bty为o时可用;

pt.bg定义图例中点的颜色;

cex、pt.cex和title.cex调整图例中文字、点和标题的大小;

pt.lwd定义图例中点的宽度;

xjust和yjust调整图例相对于插入位点的位置,0表示在插入位点左边,0.5表示居中,1表示在插入位点右边;

x.intersp和y.intersp调整图例文字和图标的间距,类似于调整表格中单元格的高度和宽度,从而改变各单元格中字符的间距,调整此参数时,图标和文字一起移动;

adj调整图例的文字对齐方式,0为左对齐,0.5为居中,1为右对齐,调整此参数时,图标不动,文字移动;

text.width、text.col和text.font调整图例中文字对于x坐标的宽度、文字的颜色和文字的字型;

merge如果为TRUE,则将点和线合并,但是并不进行颜色填充,针对散点图+折线图形式;

trace定义是否显示图例的计算过程;

plot定义是否将图例绘制出来;

ncol定义图例的列数,默认为1;

horiz定义图例是否水平显示;

title设定图例的标题;

inset定义图例距离绘图区边缘的距离;

xpd定义是否可以在绘图区域外添加图例;

title.col定义标题的颜色;

title.adj调整标题的水平位置;

seg.len定义图例中线的长度。

指示符号
线段

R中使用segments()命令绘制线段。

segments(x0, y0, x1 = x0, y1 = y0, 
col = par("fg"), lty = par("lty"), 
lwd = par("lwd"), ...)
各参数意义:

x0、y0定义线段的起始位置;

x1、y1定义线段的终点位置;

col定义线段的颜色;

lty定义线段的线型;

lwd定义线段的线宽。

箭头

R中使用arrows()命令绘制箭头符号。

arrows(x0, y0, x1 = x0, y1 = y0, 
length = 0.25, angle = 30, code = 2, 
col = par("fg"), lty = par("lty"), 
lwd = par("lwd"), ...)
各参数意义:

x0、y0定义线段的起始位置;

x1、y1定义线段的终点位置;

length箭头头部位置两条边的长度;

angle箭头头部位置轴与边的夹角;

code定义箭头的类型;

col定义线段的颜色;

lty定义线段的线型;

lwd定义线段的线宽。

矩形框

R中使用rect()命令绘制矩形框。

rect(xleft, ybottom, xright, ytop, 
density = NULL, angle = 45, col = NA, 
border = NULL, lty = par("lty"), 
lwd = par("lwd"), ...)
各参数意义:

xleft、ybottom、xright、ytop定义举行4条边的位置;

density定义矩形中是否填充阴影线,用数字定义阴影线的密度;

angle定义阴影线的角度;

col定义举行的填充颜色;

border定义举行的边框颜色;

lty定义矩形边框的线型;

lwd定义矩形边框的线宽。

多边形

R中使用polygon()命令绘制多边形。

polygon(x, y = NULL, density = NULL, 
angle = 45, border = NULL, col = NA, 
lty = par("lty"), ..., fillOddEven = FALSE)
各参数意义:

x和y为绘图所需数据的x和y坐标;

density为阴影线的密度;

angle为阴影线的角度;

border为边框的颜色;

col为填充的颜色;

lty为线型。

椭圆

R中可以使用plotrix包中的draw.ellipse()函数绘制椭圆。

draw.ellipse(x, y, a = 1, b = 1, 
angle = 0, segment = c(0, 360), 
arc.only = TRUE, deg = TRUE, 
nv = 100, border = NULL, col = NA, 
lty = 1, lwd = 1, ...)
各参数意义:

x和y为绘图数据的x和y轴坐标或绘图数据矩阵;

a和b分别为椭圆长轴和短轴的半径;

angle为椭圆旋转的角度;

segment弧形开始和结束的位置;

arc.only是绘制弧形还是椭圆;

deg定义角度的单位,TRUE代表角度,FALSE代表弧度;

nv为形成椭圆的线由多少个边构成;

border为椭圆边框的颜色;

col为填充颜色;

lty为线型;

lwd为线宽。

命令代码
bmp格式

bmp(filename = "Rplot%03d.bmp",
    width = 480, height = 480, units = "px", 
    pointsize = 12, bg = "white", res = NA, 
    family = "", restoreConsole = TRUE,
    type = c("windows", "cairo"), antialias)
jpg格式

jpeg(filename = "Rplot%03d.jpg",
     width = 480, height = 480, units = "px", 
     pointsize = 12, quality = 75, bg = "white", 
     res = NA, family = "", restoreConsole = TRUE,
     type = c("windows", "cairo"), antialias)
png格式

png(filename = "Rplot%03d.png",
    width = 480, height = 480, units = "px", 
    pointsize = 12, bg = "white", res = NA, 
    family = "", restoreConsole = TRUE,
    type = c("windows", "cairo", "cairo-png"), antialias)
tif格式

tiff(filename = "Rplot%03d.tif",
 width = 480, height = 480, units = "px", 
     pointsize = 12, compression = c("none", "rle", 
     "lzw", "jpeg", "zip", "lzw+p", "zip+p"),
 bg = "white", res = NA, family = "", 
 restoreConsole = TRUE,
     type = c("windows", "cairo"), antialias)
pdf格式

pdf(file = ifelse(onefile, "Rplots.pdf", "Rplot%03d.pdf"),
    width, height, onefile, family, title, fonts, version,
    paper, encoding, bg, fg, pointsize, pagecentre, colormodel,
    useDingbats, useKerning, fillOddEven, compress)
参数意义
filename,输出图片的名称;

width、height,输出图片的大小;

units,定义width和height的单位,可以为pixels、inches、cm和mm;

pointsize,设定文字的大小,默认为1/72英寸;

bg,图片的背景颜色;

quality,定义jpeg图片的质量,数值越小图片占用空间越小,但是质量越差;

compression,定义tiff格式图片的压缩方式,none为不压缩,图片质量最好;

res,图片的分辨率,默认为72ppi;

family,设置图片的字体,默认为Helvetica;

其它参数不用知道什么意思,默认即可;

title,输出文件的标题,默认是”R Graphics Output“;

fonts,与family意义相同;

version,输出的pdf文件的版本;

paper,默认为special,即为width和height的大小,还可以设为a4、letter、us、excutive,或a4r、usr表示横版;

fg,图片的前景颜色;

pagecentre,定义是否图像要居中;

colormodel,输出文件的颜色模式,可以为srgb、gray、cmyk,默认为srgb。

注1:由于输出图片的大小通常与RStudio的图像预览区并不一致,因此在预览中合适的参数大小和位置,在输出的图片中并不一定合适。

注2: 输出tif格式图片一定要压缩,不然一个图片几百Mb。
 

你可能感兴趣的:(统计学,r语言,开发语言)