《R语言实战》学习笔记(三)

图像初阶

同时打开多幅图像

方法一:在创建一幅新图形之前打开一个新的图形窗口,每一幅新图形将出现在最近一次打开的窗口中,之后会打开多个图形用户界面

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
参数pch可指定的绘图符号

参数lty可指定的线条类型

颜色

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)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,783评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,360评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,942评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,507评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,324评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,299评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,685评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,358评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,652评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,704评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,465评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,318评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,711评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,991评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,265评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,661评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,864评论 2 335

推荐阅读更多精彩内容