首页 > > > 【R语言】:图形初阶(2)
发现数据的模式。
检查数据的异常值。
人类非常善于从视觉呈现中洞察关系。
数据初步可视化:图形的创建和保存;自定义符号、线条、颜色和坐标轴;标注文本和标题;图形的维度;多个图形的组合。
参考书籍:《R语言实战(第2版)》第三章。
本文代码运行环境为Windows版RStudio。
看下面这张Excel表格,这是一个假想的例子,描述了病人对两种药物五个剂量水平上的响应情况。

dose <- c(20, 30, 40, 45, 60)
drugA <- c(16, 20, 27, 40, 60)
drugB <- c(15, 18, 25, 31, 40)如何用函数plot绘制一幅描述药物A剂量与病人响应关系的图形呢?
首先,我们需要了解函数plot的基本情况。在RStudio中输入help(plot),在右下角的区域中可以详细看到函数plot的帮助文件,纯英文版本(敲黑板,论学好英文的重要性),非常详细的介绍了plot函数的用法(Usage)、参数(Arguments)以及一些细节信息(Details)和例子(Examples)等。

详细说一下最重要的两部分——用法(Usage)和参数(Arguments)。
用法(Usage)指的是函数plot的公式:。公式中有三个参数“x”、“y”和“...”,其中x和y都是图形中点的坐标,x表示横轴,y表示纵轴;最后一个参数“...”是绘制图形的各种方法和选项(methods),主要有type、main、sub、xlab、ylab、asp等(请自行阅读理解并自己动手尝试画图看效果),具体见下图。

plot(dose, drugA, type="b")于是得到了一幅非常简单的描述药物A剂量与病人响应关系的图形,姑且称之为图A。

上面绘制出来的图形非常简单(粗糙),我们可以通过修改图形参数来自定义一幅图形的许多特征:字体、颜色、坐标轴、标题。
利用函数par可以对设置图形参数,在RStudio(或R语言程序)中直接运行代码par()可以查看当前图形的各种参数,运行代码par(no.readonly = TRUE)查看可以修改当前图形的参数列表。
记忆方法:英文readonly表示只读,no.readonly就表示非只读,当其为真(TRUE)时,即表示可以修改参数。
#查看各种参数,执行以下代码
par()
#查看可以修改当前图形的参数列表
par(no.readonly = TRUE)利用函数par设置了参数之后一直有效,除非参数值被再次修改或者结束会话(关闭软件)。
输入并运行下面的代码可以对图A进行一些修改。
#复制并记录图形当前的参数设置,并记录为opar,当然也可以把opar改成任何你想要的名称
opar <- par(no.readonly = TRUE)
#将默认的线条类型修改为虚线(lty=2),将默认的点符号改为了实心三角(pch=17)
par(lty = 2, pch = 17)
#也可以多次使用par函数,即写成par(lty = 2)、par(pch = 17)
#绘制图形
plot(dose, drugA, type="b")
#将之前记录的参数opar利用函数par还原
par(opar)
运行代码,结果如下图,记为图A-1。

plot(dose, drugA, type="b", lty = 2, pch = 17)对于看了以上内容还是一头雾水纠结代码中“lty = 2”和“pch = 17”的同学,请继续往下看。
一、符号与线条
为了方(tou)便(lan),除了在RStudio中运行代码生成的图形之外,以下部分图表直接截取《R语言实战(第2版)》第三章中的内容。
通过改变下表中的图形参数修改绘制图形时使用的符号和线条类型。



plot(dose, drugA, type="b", lty = 3, lwd = 3, pch = 15, cex = 2)线条类型选择数字3对应的线条,宽度是默认的3倍,点符号选择15实心方块,符号大小是默认的2倍,运行代码后结果如下图,记为图A-2。

同上,除了在RStudio中运行代码生成的图形之外,以下部分图表直接截取《R语言实战(第2版)》第三章中的内容。

col=1
col="white"
col="#FFFFFF"
col=rgb(1,1,1)
col=hsv(0,0,1)
函数color()的返回值是所有657种颜色的名称,下图是运行函数color()后的部分截图。

R语言中有许多生成连续颜色的函数,包括函数 rainbow() 、heat.colors() 、terrain.colors() 、topo.colors()以及cm.colors()等;函数gray可以生成多阶灰度,需要通过用0-1之间的向量值来确定各种颜色的灰度,比如gray(0:10/10) 将生成10阶灰度色(五十度灰是可以实现的,亲测有效)。
在RStudio中输入以下代码,注释里将具体每行代码的含义。
#将绘图区域划分为1行2列,函数mfrow(x, y)表示将指将绘图区域分成x行y列,并按行的顺序依次绘图填充。
par(mfrow = c(1, 2))
#给n赋值10
n <- 10
#生成n种连续的“彩虹型”颜色
mycolors <- rainbow(n)
#pie函数用来画饼图,运行help("pie")查看该函数帮助文件;嵌套重复函数rep(x, y),表示将x重复y次;labels标签显示为变量mycolors的名称;col颜色为变量mycolors的颜色
pie(rep(1:10), labels = mycolors, col = mycolors)
#生成n阶灰度色
mygrays <- gray(0:n/n)
#pie函数同上
pie(rep(1,n), labels = mygrays, col = mygrays)运行代码后生成下图。

除了在RStudio中运行代码生成的图形之外,以下部分图表直接截取《R语言实战(第2版)》第三章中的内容。
图形参数同样可以用来指定字号、字体和字样。



字号和字体的设置相对容易。如果在RStudio中运行以下代码,之后创建的所有图形的坐标轴标签名称的字体为:斜体(font.lab)、1.5倍(cex.lab)于默认文本大小,标题字体为:粗斜体(font.main)、2倍(cex.main)于默认文本大小。
par(font.lab = 3, cex.lab = 1.5, font.main = 4, cex.main = 2)字体族(family)的设置相对复杂。字体族的衬线、无衬线和等宽字体可以设置,Windows系统中通过函数windowFont()创建,Mac系统通过函数quartzFonts()创建。
以PDF格式输出图形,可以运行代码names(pdfFonts()) 找出你的系统中有哪些字体是可用的,然后使用 pdf(file="myplot.pdf", family="fontname") 来生成图形。以PostScript格式输出的图形,将相应的代码更换为names(postscriptFonts())和postscript(file="myplot.ps", family="fontname")即可。
四、图形尺寸和边界尺寸
除了在RStudio中运行代码生成的图形之外,以下部分图表直接截取《R语言实战(第2版)》第三章中的内容。

我们还以最开始创建图形A的原始数据作为例子,重新绘制两幅图形。我将下面代码中以注释的形式详细说明每一行代码的含义,全部代码如下:
#将绘图区域划分为1行2列,函数mfrow(x, y)表示将指将绘图区域分成x行y列,并按行的顺序依次绘图填充。
par(mfrow = c(1,2))
#输入表格数据
dose <- c(20, 30, 40, 45, 60)
drugA <- c(16, 20, 27, 40, 60)
drugB <- c(15, 18, 25, 31, 40)
#复制并记录图形当前的参数设置,并记录为opar,可把opar改成任何其它自定义名称
opar <- par(no.readonly = TRUE)
#图形尺寸为2英寸宽,3英寸高
par(pin = c(2, 3))
#图形中线条的宽度是宽度是默认的3倍,符号大小是默认的2倍
par(lwd = 2, cex = 1.5)
#坐标轴字符大小为默认的0.75倍,坐标轴字符类型为3
par(cex.axis = 0.75, font.axis = 3)
#绘制图形,横轴为药物剂量,纵轴为病人对药物A的响应情况,并且同时绘制点和线;图形中的点为符号19(实心圆点),线条类型为数字2对应线条,线和点的颜色设定为红色
plot(dose, drugA, type = "b", pch = 19, lty = 2, col = "red")
#绘制图形,横轴为药物剂量,纵轴为病人对药物B的响应情况,并且同时绘制点和线;图形中的点为符号23(设定边界颜色为蓝色和填充颜色为绿色),线条类型为数字6对应线条,颜色为蓝色。
#需要注意,col不仅设定符号pch=23的边界颜色,同时也设定了线条颜色。bg仅设定符号pch=23的填充颜色
plot(dose, drugB, type = "b", pch = 23, lty = 6, col = "blue", bg = "green")
#将之前记录的参数opar利用函数par还原
par(opar)在RStudio中运行以上全部代码,生成下图。

明显可以看出,上面的图形并非完美无瑕。比如,这两幅图都缺少标题,并且纵轴的刻度单位不同,人们也很难直接比较两种药物的能力。同时,坐标轴的标签(名称)也缺少更多的相关信息。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3144761/ ,如需转载,请注明出处,否则将追究法律责任。