感谢Robert I.Kabacoff 著作本书,同时感谢高涛、肖楠、陈钢编译此书。
最近在学习《R语言实战》,特将学习过程记录下来,供各位朋友参考,虽说是笔记,但是90%是书中内容,另外10%是自己偶尔冒出的一点点想法的记录和一些疑问,希望互相探讨。末尾有本章的代码清单下载地址,与各位交流,还是提倡按照书中内容把代码一个个敲出来。
第三章 图形初阶
本章内容
图形的创建与保存
自定义符号、线条、颜色和坐标轴
标注文本和标题
控制图形维度
组合多个图形
3.1 使用图形
在通常的交互式会话中,你可以通过逐条输入语句构建图形,逐渐完善图形特征,直至得到想要的结果。
在通过代码保存图形时,将绘图语句夹在开启目标图形设备的语句和关闭目标图形设备的语句直接即可。
通常绘制新图形时,会覆盖掉之前的图形,有三种方法能保证创建多个图形并随时查看每一个。
- 第一种:在创建一个新图形之前,打开一个新的图形窗口:
dev.new()
statements to creat graph 1
dev.new()
statements to creat graph 2
etc
每一幅新图形将出现在最近一次打开的窗口中。
第二种:通过图形用户界面查看多个图形。
在windows上分为两步,在打开第一个图形窗口以后勾选历史(History)→记录(Recording),然后使用菜单中的上一个(Previous)和下一个(Next)来逐个查看已经绘制的图形。第三种:使用函数dev.new()、dev.next()、dev/prev()、dev.set()和dev.off()同时打开多个图形窗口,并选择将哪个输出发送到哪个窗口中,这种方法全平台适用。
3.2 一个简单的例子
在plot(x,y,type = "b")中,type的类型有9种。分别绘制不同的图形。
b
c
h
l
o
p
大S
小s
其中o和b、大S和小s需要特别注意一下,仔细观察图形,注意他们的不同点。
3.3 图形参数
第一种方法是使用par()函数,来指定图形的多个特征(字体、颜色、坐标轴、标题)。这种方法的特点是:除非秀给其中参数,否则将在会话结束前一直有效。
par(optionname = value,optionname = name,…)
如果不加参数地执行par()将生成一个含有当前图形参数设置的列表。添加参数no.readonly = TRUE可以生成一个可以修改的当前图形参数列表。
第二种方法是为高级绘图函数直接提供optionname = value的键值对。仅对当前图形有效。代码:
plot(dose,drugA,type = "b",lty = 2,pch = 17)
并不是所有的高级绘图函数都允许指定全部可能的图形参数,需要参考函数的帮助来确定哪些参数可以通过这种方式设置。
3.3.1 符号和线条
pch : 指定绘制点时使用的符号。(书中P45)
cex : 指定符号的大小,cex是一个数值,表示绘图符号相对于默认大小的缩放倍数,默认大小为1。1.
lty : 指定线条类型。(书中P46)
lwd : 指定线条宽度。lwd是以默认值的相对大小来表示的(默认值为1)
对于pch=21~25,还可以指定便捷颜色(col = )和填充色(bg = )
3.3.2 颜色
3.3.3 文本属性
par(font.lab = 3, cex.lab = 2, font.main = 4, cex.main = 2)
为何在文本属性的设置中,没有仅对当前图形设置生效的方法?
3.3.4 图形尺寸与边界尺寸
- pin 以英寸表示的图形尺寸
- mai 以数值向量表示的边界大小,顺序为“下、左、上、右”,单位为英寸。
- mar 以数值向量表示的边界大小,顺序为“下、左、上、右”,单位为英分。默认值为c(5,4,4,2)+0.1
一英分等于十二分之一英寸。
按照代码清单做一遍的同时,先自己理解每一句的含义,再看书中的解释。
3.4 添加文本、自定义坐标轴和图例
有些高级绘图函数允许自行设定坐标轴和文本标注选项。书中例子为图形添加了
标题 main
副标题 sub
坐标轴标签 xlab、ylab
坐标轴范围 xlim、ylim
某些高级绘图函数已经包含了默认的标题和标签。可以通过plot()语句或单独的par()语句中添加ann=FLASE来移除他们。
3.4.1 标题
使用title()函数为图形添加标题和坐标轴标签。调用格式为:
title(main = "main title", sub = "sub-title", xlab = "x-axis label", ylab = "y=axis label")
3.4.2 坐标轴
可以使用函数axis()来创建中自定义的坐标轴,而非使用R中的默认坐标轴。其格式为:
axis(side, at = , labels = , pos = , lty = ,col = , las = , tck = , …)
参数axes=FALSE将禁用高级绘图函数自动生成的坐标轴。包括坐标轴框架线。
参数frame.plot=TRUE将恢复坐标轴框架线。
参数xaxt="n"和yaxt="n"将分别禁用X轴和Y轴,会留下框架线,只是去除了刻度。
在代码清单中,有一个round()函数,其主要作用是取两位小数。如round(1.235, digits = 2)返回的值为:1.24。其中digits可省略,直接写成round(1.235,2)。
次要刻度线
添加次要刻度线,需要使用Hmisc包中的mino.tick()函数,在载入Hmisc包之前,需载入lattice、survival、Formula、ggplot2包。
minor.tick(nx = n, ny = n, tick.ratio = n)
nx和ny分别指定了X轴和Y轴每两条主刻度线之间通过次要刻度线划分得到的区间个数。tick.ratio表示次要刻度线相对于主刻度线的大小比例。当前的主刻度线长度可使用par("tck")获取。
3.4.3 参考线
abline(h = yvalues, v = xvalues)
为图形添加参考线。也可以指定其他图形参数(线条类型,颜色和宽度等等)
注意:在输入书中两串代码时,得到的结果并不是,如图中所说的位置添加了参考线,反而在意料之外的位置,出现了两条线,这是为什么?复习时,需要重新检查。
3.4.4 图例
使用legend()函数来添加图例。格式如下:
legend(location, title, legend, …)
3.4.5 文本标注
text()和mtext()函数。text()函数还可以标示图形中的点。我们只需要制定一系列x,y坐标作为位置参数,同时以向量的形式指定要放置的文本。x、y和文本标签向量的长度应当相同。
数学标注
使用类似于TeX中的写法为图形添加数学符号和公式。请参阅help(plotmatch)以获得更多的细节和示例。
3.5 图形的组合
可以在par()函数中使用图形参数mfrow=c(nrows, ncols)来创建按行填充的、行数为nrows、列数为ncols的图形矩阵。也可以使用mfcol=c(nrows,ncols)按列填充矩阵。
代码清单3-4展示了图形布局的精细控制,我们可随自己的想法调整想要展示的图形。
问:P61中的第二行代码,创建一个矩阵式什么意思?