ITPub博客

首页 > > > 【R语言】:图形初阶(2)

【R语言】:图形初阶(2)

作者:浪花小雨滴 时间:2020-06-17 10:35:59 0 删除 编辑
发现数据的模式。
检查数据的异常值。
人类非常善于从视觉呈现中洞察关系。
数据初步可视化:图形的创建和保存;自定义符号、线条、颜色和坐标轴;标注文本和标题;图形的维度;多个图形的组合。
参考书籍:《R语言实战(第2版)》第三章。
本文代码运行环境为Windows版RStudio。

简单的例子

看下面这张Excel表格,这是一个假想的例子,描述了病人对两种药物五个剂量水平上的响应情况。

由于表格有三列,因此在RStudio中创建三个列向量,输入上面表格中的数据,代码如下。

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的公式:plot(x, y, ...)。公式中有三个参数“x”、“y”和“...”,其中x和y都是图形中点的坐标,x表示横轴,y表示纵轴;最后一个参数“...”是绘制图形的各种方法和选项(methods),主要有type、main、sub、xlab、ylab、asp等(请自行阅读理解并自己动手尝试画图看效果),具体见下图。


因此,输入并运行下面代码,横轴为药物剂量,纵轴为病人对药物A的响应情况,并且同时绘制点和线将点集(dose, drugA)连接。

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。


此外,另外一种将图A修改为图A-1的方法是直接在函数plot(hist直方图和boxplot箱型图也可以)中增加参数,但仅对当前这幅图有效,并且不是所有的参数都能够通过这种方法修改,需要通过help函数具体查看哪些参数可以修改。该方法代码如下:
plot(dose, drugA, type="b", lty = 2, pch = 17)

对于看了以上内容还是一头雾水纠结代码中“lty = 2”和“pch = 17”的同学,请继续往下看。

一、符号与线条

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


通过改变下表中的图形参数修改绘制图形时使用的符号和线条类型。


敲黑板之一: 输入代码pch= 修改绘制点时使用的符号。对照下图,上面代码中“pch = 17”表示把图形中的点改为黑色实心三角形。注意红色方框标记的符号21-25,还可以通过加入代码col=修改符号的边界颜色,加入代码bg=修改符号的填充颜色。

敲黑板之二:输入代码lty=修改绘制图形时的线条类型。对照下图,上面代码中“lty = 2”表示把图形中的线条类型修改为下图数字2后面对应的线条。

根据以上的参数,我们再次修改原来的代码来改变图A,代码如下:

plot(dose, drugA, type="b", lty = 3, lwd = 3, pch = 15, cex = 2)

线条类型选择数字3对应的线条,宽度是默认的3倍,点符号选择15实心方块,符号大小是默认的2倍,运行代码后结果如下图,记为图A-2。

二、颜色

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

上表为颜色设置的说明,可以作为其他函数中的参数设置各种颜色,具体操作中通过颜色下标、颜色名称、十六进制的颜色值、RGB值或HSV值(参考网址:Chart of R Colors)来指定颜色,总共有657种(是的,你没有看错)。比如,以下代码每一行都表示白色,其中RGB后面的三个参数分别为红-绿-蓝三色值,HSV后面三个参数分别为色相、饱和度、亮度值。

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/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: docker安装与使用
请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    40009