图像初阶
同时打开多幅图像
方法一:在创建一幅新图形之前打开一个新的图形窗口,每一幅新图形将出现在最近一次打开的窗口中,之后会打开多个图形用户界面
dev.new( )
statements to create graph 1 # 创建图形1
dev.new( )
statements to create a graph 2 # 创建图形2
注意:也可用x11()打开新的图形窗口
方法二:通过图形用户界面来查看多个图形,使用菜单中的“上一个”(Previous)和“下一个”(Next),来逐个查看已经绘制的图形
方法三:使用函数dev.new( )、dev.next( )、dev.prev( )、 dev.set( ) 和 dev.off( )同时打开多个图形窗口,并选择将哪个输 出发送到哪个窗口中
dev.set(dev.prev()) # 设置前一个窗口为当前绘图窗口
dev.set(dev.next()) # 设置下一个窗口为当前绘图窗口
dev.off() # 关闭该图形设备
plot函数中type变量的种类
par(mfrow = c(2,3))
plot(c(1:10),type = "p",main = "'p' 点")
plot(c(1:10),type = "l",main = "'l' 线")
plot(c(1:10),type = "b",main = "'b' 断点为点,线连接,点线不相交")
plot(c(1:10),type = "c",main = "'c' 仅线,不连续")
plot(c(1:10),type = "o",main = "'o' 点、线且相交")
plot(c(1:10),type = "n",main = "'n' 空图")
图形参数
可以通过修改图形参数,来自定义一幅图形的特征 —— 字体、颜色、坐标轴、标签
方法1:通过函数,par( optionname=value, optionname=name, ... )
par函数共有72个参数,分为三类:
第一类,只能读取,不能进行设置,例如参数cin、cra、csi、cxy、din
第二类,只能通过函数par()进行设置,例如参数ask、fig、fin、lheight、mai、mar、mex、mfcol、mfrow、mfg、new、oma、omd、omi、pin、plt、ps、pty、usr、xlog、ylog
第三类,其它参数既可以使用函数par()进行设置,还可以通过各种 高级绘图函数进行设置,例如plot,points,lines,abline等
下面介绍参数时使用数字加点的形式表示参数是第几类参数
方法2:直接在绘图函数中设置optionname的键值,这种情况下,指定的选项仅对这幅图形本身有效
符号和线条
3.pch 符号形状
3.cex.axis 坐标轴字号
3.cex.lab 标签字号
3.cex.main 题目字号
3.cex.sun 副题目字号
3.lty 线的类型
3.lwd 线条宽度。必须为一个整数,默认值为1
颜色
3.col 默认绘图颜色
3.col.axis 坐标轴颜色
3.col.lab 标签颜色
3.col.main 题目颜色
3.col.sub 副标题颜色
3.fg 前景色
3.bg 背景色
在R中,可以通过颜色下标、颜色名称、十六进制的颜色值、RGB值或HSV值来指定颜色
例如,白色可以表示为:col=1, col="white“, col="#FFFFFF", col=rgb(1,1,1), col=hsv(0,0,1)
heat.colors( )、terrain.colors( )、topo.colors( )、 cm.colors( )函数是四种连续性颜色向量函数
多阶灰度色可使用基础安装所自带的gray()函数生成 (元素值为0到1),例如:gray(0:10/10)将生成10阶灰度色
RColorBrewer包创建颜色向量
包中颜色板被划分为序列型(sequential)、离散型(diverging)、分类型(qualitative)三种
brewer.pal(n, name),可以创建一个颜色值的向量,n表示颜色向量的维度(即多少种颜色),name表示颜色板的类型(sequential、diverging、qualitative),可以按顺序提取出用户想要的颜色
display.brewer.pal()显示某个指定的颜色板
display.brewer.all()显示某个类型全部的颜色板
文本属性
字号相关的参数
3.cex 相对默认大小缩放倍数的数值
3.cex.axis 坐标轴字号
3.cex.lab 标签字号
3.cex.main 题目字号
3.cex.sun 副题目字号
字体相关的参数
3.font 整数,用于指定绘图使用的字体样式,1=常规,2=粗体,3=斜体,4=粗斜体,5=符号字体
3.font.axis 坐标轴字体
3.font.lab 标签字体
3.font.main 题目字体
3.font.sub 副题目字体
2.ps 字体磅值
3.family 全局字体,特指字体的类型,标准取值为serif(衬线)、sans(无衬线)和mono(等宽)
在windows平台可以通过函数windowsFont()来创建字体族:
windowsFonts(
A=windowsFont("Arial Black"),
B=windowsFont("Bookman Old Style"),
C=windowsFont("Comic Sans MS")
)
之后,即可使用A、B和C作为family的取值,例如 par(family="A"),将指定ArialBlack作为绘图字体
图形尺寸与边界尺寸
2.pin 图的长宽,形式为c(width,height),单位为英寸
2.mai 设置图形空白边界,mai =c(bottom, left, top, right),单位为英寸。缺省为mai = c(1.02,0.82,0.82,0.42)
2.mar 设置图形空白边界,mar =c(bottom, left, top, right),单位为英分。缺省为mar = c(5,4,4,2)
2.mfcol, mfrow 设置小图数量与位置,数值型向量c(nrow, ncol)。图按列排(mfcol)或按行排(mfrow)
添加文本、自定义坐标轴和图例
标题
title( ) 为图形添加标题和坐标轴标签
title (main="main title", sub="subtitle", xlab="x-axis label", ylab="y-axis label")
坐标轴
axis(side, at=, labels=, pos=, lty=, col=, las=, tck=, ...) 来创建自定义的坐标轴
side 一个整数,表示在图形的哪边绘制坐标轴(1=下,2=左,3=上,4=右)
at 一个数值型向量,表示需要绘制刻度线的位置
labels 一个字符型向量,表示置于刻度线旁边的文字标签(若为null,则直接只用at中的值)
pos 坐标轴线绘制位置的坐标(即与另一条坐标轴相交位置的值)
lty 线条类型
col 线条和刻度线颜色
las 线条是否平行于(=0)或垂直于(=2)坐标轴
tck 刻度线的长度,以相对于绘图区域大小的分数表示(负值表示在图形外侧,正值表示在内侧,0表示禁用刻度,1表示绘制网格线)默认值为-0.01
参考线
abline (h=yvalues, v=xvalues) 为图形添加参考线
lines()和abline()的区别:
lines(x, y=NULL, type="l"):绘制关于x、y向量的直线, 相当于plot(x, y=NULL, type="l"),但是lines()函数不能单 独绘制图形
abline(x, y):表示画一条y=a+bx的直线
abline(h=y):绘制y值固定的一条水平直线
abline(v=x):绘制x值固定的一条垂直直线
abline(lm.obj):绘制线性模型lm.obj的拟合直线
图例
legend (location, title, legend, ...) 为图形添加图例
location 制定图例的位置。可以直接给出x,y的坐标,也可以通过locator(1)用鼠标点击给出图例的位置,也可使用关键字bottom、bottomleft、left、topleft、top、topright、right、bottomright或center放置图例
title 图例标题的字符串
legend 图例标签组成的字符型向量
opar <- par(no.readonly=TRUE)
par(lwd=2, cex=1.5, font.lab=2)
plot(dose, drugA, type="b", pch=15, lty=1, col="red",
ylim=c(0, 60), main="Drug A vs. Drug B", xlab="Drug Dosage", ylab="Drug Response")
lines(dose, drugB, type="b", pch=17, lty=2, col="blue")
abline(h=c(30), lwd=1.5, lty=2, col="gray")
legend("topleft", inset=.05, title="Drug Type", c("A","B"),
lty=c(1, 2), pch=c(15, 17), col=c("red", "blue"))
par(opar)
文本标注
text (location, text, pos, ...) 向绘图区域内部添加文本
mtext( text, side, line, outer = FALSE, at, adj, cex, col, font, ... ) 向图形的四个边界添加文本
pos 文本相对于位置参数的方位,1=下面,2=左边,3=上边,4=右边
text 绘制的文本
side 哪个页边留出空白(1=下面,2=左边,3=上边,4=右边)
line 相对于坐标轴,文本出现的位置(坐标轴向外从0开始计数)
outer 是否允许使用外边缘
at 给定坐标轴上每个字符串的位置
adj 调整每个字符串的阅读方向(0=左对齐或下对齐,1=右对齐 或上对齐)
drug<- data.frame(dose,drugA)
row.names(drug)<-c("d1","d2","d3","d4","d5")
plot(dose, drugA, main="dose vs. drugA", xlab="dose", ylab="drugA", pch=18, col="blue")
mtext("x-axis",3,cex=2)
mtext("y-axis",4,cex=2 )
text(dose, drugA, row.names(drug),cex=2, pos=4, col="red")
图形的组合
par()函数
在par( )函数中使用图形参数 mfrow=c(nrows, ncols)来创 建按行填充的、行数为nrows、列数为ncols的图形矩阵,还可以使用mfcol=c(nrows, ncols)按列填充矩阵
dose <- c(20,30,40,45,60)
drugA <- c(16,20,27,40,60)
drugB <-c(15,18,25,31,40)
par(mfrow=c(2,2))
plot(dose, drugA, main="Scatterplot of dose vs.drugA")
plot(dose, drugB, main="Scatterplot of dose vs. drugB")
hist(dose, main="Histogram of dose")
boxplot(dose, main="Boxplot of dose")
注意:绘图函数hist( )包含了一个默认的标题(使用main=“”可 以禁用它,或者使用ann=FALSE来禁用所有标题和标签)
layout()函数
函数layout( )的调用形式为layout(mat,widths,heights,...)
其中,mat是一个矩阵,它指定了所要组合的多个图形的所在位置
widths = 各列宽度值组成的一个向量
heights = 各行高度值组成的一个向量
相对宽度可以直接通过数值指定,绝对宽度(以厘米为单位)可以通过函数lcm( )来指定
dose <- c(20,30,40,45,60)
drugA <- c(16,20,27,40,60)
drugB <-c(15,18,25,31,40)
#各子图宽度按照3:1分配,各子图高度按照1:2分配
layout(matrix(c(1, 1, 2, 3), 2, 2, byrow = TRUE),widths=c(3, 1), heights=c(1, 2))
hist(dose)
hist(drugA)
hist(drugB)
图形布局的精细控制
fig=c(x1, x2, y1, y2)实现对图形布局的精细控制
其中,x1、x2表示绘图区域在x轴方向的起止范围
y1、y2表示绘图区域在y轴方向的起止范围,如果设置了该参数,需要同时配合new=TRUE以在指定区域绘制 一幅新图形
完整的绘图区域:左下角坐标为(0, 0),而右上角坐标为(1, 1)
dose <- c(20,30,40,45,60)
drugA <- c(16,20,27,40,60)
drugB <-c(15,18,25,31,40)
par(fig=c(0, 0.8, 0, 0.8))
plot(dose, drugA, xlab="dose", ylab="drugA")
par(fig=c(0, 0.8, 0.55, 1), new=TRUE)
boxplot(dose, horizontal=TRUE, axes=FALSE)
par(fig=c(0.65, 1, 0, 0.8), new=TRUE)
boxplot(drugA, axes=FALSE)
mtext("Enhanced Scatterplot", side=3, outer=TRUE, line=-3)