ITPub博客

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

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

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

添加文本、自定义坐标轴和图例

高级绘图函数比如plot、hist、boxplot可以自行设定坐标轴和文本标注。以【R语言】:图形初阶(1)及【R语言】:图形初阶(2)中的病例数据为例,将原始数据导入后,再输入以下代码:
plot(dose, drugA, type = "b", col = "red", lty =2, pch = 2, lwd = 2, main = "Clinical Trials for Drug A", sub ="This is hypothetical data", xlab = "Dosage", ylab = "Drug Response", xlim = c(0, 60), ylim = c(0, 70))
代码中前半部分的含义请前往【R语言】:图形初阶(2)查看,下面详细说明代码的后半部分。main用来定义图形的标题;sub定义图形的副标题;xlab、ylab分别定义了x轴和y轴的标签;xlim = c(0, 60)确定了x轴的范围是0-60、ylim = c (0, 70)确定了y轴的范围是0-70。运行代码的结果如下图。

重要的事情再说一次,并非所有的函数都支持修改上述选项,使用的过程中可以随时利用函数help来查看各类函数的帮助。
某些高级绘图函数中存在默认的标题和标签,可以在plot()或者单独的par()中添加ann=FALSE移除这些高级绘图函数中默认的标题和标签。
一、标题
使用title函数修改标题和坐标轴标签,输入代码help(“title")查看函数的帮助文件,下图为title函数帮助文件中用法Usage的截图。
参数main定义标题;sub定义副标题;xlab定义x轴标签;ylab定义y轴标签;line通过一个数值确定标题和标签相对于图形的位置,距离边界有多少行;outer是逻辑变量,如果为TRUE表示标题位于图形边界之外;...表示可以设置的其他参数,比如设置颜色用col.main、col.sub、col.lab等,设置大小用cex.main、cex.sub、cex.lab等,具体可以参考函数par的参数设置。

二、坐标轴

使用axis函数定义坐标轴,输入代码help("axis")查看函数的帮助文件,下图为axis函数帮助文件中用法Usage的截图

各个参数的含义见下图(截图来自于《R语言实战(第2版)》第三章)


如果自定义坐标轴,应禁用高级绘图函数(如plot等)自动生成的坐标轴。参数axes=False可以禁用所有坐标轴,包括坐标轴框架;若保留坐标轴框架,需要添加参数frame.plot=TRUE。参数xaxt="n和"yaxt="n"分别禁用x轴和y轴,但会保留坐标轴框架。

下面的例子演示了如何设置之前讨论的各种图形参数特征,但增加了两个后面会学习的新函数,其中lines函数可以绘制新的图形在原来的图形上;mtext函数可以在图形边界添加文本。还会用到axis函数自定义坐标轴,详细的说明见代码注释,具体的代码如下:

#生成数据
x <- c(1:10)
y <- x
z <- 10/x

#复制并记录图形当前的参数设置,并记录为opar,当然也可以把opar改成任何想要的名称
opar <- par(no.readonly = TRUE)

#设置绘图边距,定义的顺序是“下,左,上,右”,下面代码的含义为“下边距5行,左边距4行,上边距4行,右边距8行,统一增加0.1行”
par(mar=c(5, 4, 4, 8) + 0.1)

#用plot函数绘制x与y的图形,yaxt="n"表示不绘制y轴标签,ann=FALSE移除默认的标题和标签
plot(x, y, type = "b", pch = 21, col = "red", yaxt = "n", lty = 3, ann = FALSE)

#绘制x与z的曲线
lines(x, z, type="b", pch = 22, col = "blue", lty = 2)

#用axis函数绘制自己的坐标轴,第一个参数为1-4的整数,分别表示在“下、左、上、右”绘制坐标轴,2表示坐标轴在左边;at=x表示按照x取(画)坐标轴刻度线的位置(点),即图中坐标轴的刻度线;labels=x表示按照x对坐标轴刻度线相对应进行标记(即图中对应的数字);las表示坐标标记与坐标轴方位关系,=0为平行,=2为垂直
axis(2, at = x, labels = x, col.axis = "red", las = 2)

#4表示坐标轴在右边,at=z表示按照z取(画)坐标轴刻度线的位置(点),即图中坐标轴的刻度线;labels=round(z, digits = 2)表示按照z对坐标轴刻度线相对应进行标记(即图中对应的数字),round表示四舍五入,digits=2表示保留两位小数;tck表示刻度线的长度,以相对于绘图区域大小的分数表示,正值表示向内画刻度线,负值表示向外画
axis(4, at = z, labels=round(z, digits = 2), col.axis = "blue", las = 2, cex.axis = 0.7, tck = -0.01)

#mtext函数表示在图形空白处输出文本,第一个参数是文本内容“y = 10/x”,side表示输入方位1-4分别是“下、左、上、右”,line=3表示文本离边界线3行
mtext("y = 10/x", side = 4, line = 3, cex.lab = 1, las = 2, col = "blue")

#图形标题
title("An Example of Creative Axes", xlab = "X values", ylab = "Y=X")

#将之前记录的参数opar利用函数par还原
par(opar)

运行代码后,生成下图。

《R语言实战(第2版)》第三章在坐标轴这部分内容的最后增加了次刻度线的概念,使用Hmisc包(如果没有安装Hmisc需要先安装,如何安装新的包请参考【R语言】:导入Excel数据)中的minor.tick()函数增加次刻度线,后面会举例详细说明。
三、参考线

函数abline()可以用来为图形增加参考线,输入代码help("abline")查看函数的帮助文件,下图为函数abline帮助文件中用法Usage的截图

其中a是常数项,b是斜率(相当于中学数学的直线函数y=bx+a);h是水平线,v是竖直线。

这里暂时不单独举例,学习完接下来图例的相关内容之后再举例说明。

四、图例

在实际应用中,绘制的图形中往往包含不止一组数据,这时图例能够帮助用户辨别每个条形、扇形区域或折线分别代表哪一组数据。

函数legend()可以用来增加图例,输入代码help("legend")查看函数的帮助文件,下图为函数legend帮助文件中用法Usage的截图

函数legend的参数特别多,《R语言实战(第2版)》第三章的相关内容里并没有给出特别详细的解释,有点让人读起来不知所云。我用Google搜索了一下相关内容,在一位网友的新浪博客中找到了函数legend的参数详解,列举的非常详细。我把截图贴在下面,非常感谢这位网友,大家在实际应用的时候可以直接对照参考使用。

举例说明如何使用次刻度线、参考线、图例,代码如下

#生成数据
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)

#用par函数绘制图形
par(lwd = 2, cex = 1.5, font.lab = 2)

#用plot函数绘制drugA与dose图形
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")

#绘制drugB与dose图形
lines(dose, drugB, type="b", pch = 17, lty = 2, col = "blue")

#绘制参考线,h = c(30)表示通过y轴上刻度为30的水平线
abline(h = c(30), lwd = 1.5, lty = 2, col = "gray")

#给坐标轴增加次刻度线,载入包Hmisc,使用minor.tick函数,其中参数nx=3和ny=3分别指定了X轴和Y轴每两条主刻度线之间通过次要刻度线划分得到3个小区间,tick.ration=0.5表示次要刻度线相对于主刻度线的大小比例为0.5倍
library(Hmisc)
minor.tick(nx = 3, ny = 3, tick.ratio = 0.5)

#增加图例,用legend函数,topleft表示在图左上角添加图例(还有bottomright、bottom、bottomleft、left、top、topright、right以及center),inset表示图例对对应边缘线的距离,title为图例的标题,后面向量分别对应两条曲线各自的参数
legend("topleft", inset = .05, title = "Drug Type", c("A","B"), lty = c(1,2), pch = c(15,17), col = c("red","blue")) 

#将之前记录的参数opar利用函数par还原
par(opar)

运行代码后,生成下图

可以看出次刻度线是把原来坐标轴的刻度细化了,参考线是在纵坐标轴刻度为30的水平线,图例在图形左上部分。

五、文本标注

在图形上增加文本通过函数 text()和mtext()来实现,其中函数text()可向图形区域内部添加文本,而函数mtext()可以向图形的任意四个边界之一添加文本。

下图分别为函数 text()和mtext()帮助文件中用法Usage的截图。

其中x和y是文本坐标;labels是内容;adj是adjustment的缩写,用[0,1]之间的数字调整labels文本内容;pos是position的缩写,确定文本位置,1-4分别为“下、左、上、右”;pos确定的情况下,offset确定字符宽度;vfont为空(NULL)表示当前字体族,不为空选择其他字体;最后cex、col和font分别用来调整字号、颜色和字体样式。下图为函数 text()和mtext()的常用选项,截图来自于《R语言实战(第2版)》第三章。

下面以R语言自带数据框(data.frame)mtcars为例,针对不同车型的车重和每加仑汽油行驶英里数绘制散点图,代码如下

#获取系统自带数据框mtcars
attach(mtcars)

#绘制散点图
plot(wt, mpg, main = "Milage vs. Car Weight", xlab = "Weight", ylab = "Mileage", pch = 18, col = "blue")

#函数 text() 增加文本,cex=0.6表示每个点的标签为原始大小的0.6倍,pos=4表示在各个数据点右侧添加车辆型号,颜色为红 
text(wt, mpg, row.names(mtcars), cex = 0.6, pos = 4, col = "red")

#解除绑定数据框mtcars
detach(mtcars)

运行代码,得到图形如下

下面的代码是演示了如何在图形中展现的不同字体

opar <- par(no.readonly = TRUE)
par(cex = 1.5)
plot(1:7, 1:7, type = "n")
text(3, 3, "Example of default text")
text(4, 4, family = "mono", "Example of mono-spaced text")
text(5, 5, family = "serif", "Example of serif text")
par(opar)

运行代码后,得到下图

数学标注

还可以在图形中添加数学符号和公式,可以通过运行代码help("plotmath")查看,还可以运行代码demo("plotmath")即时查看效果,plotmath非常强大,贴出5张demo图。

图形的组合

图形组合的技巧非常实用,因为几幅图组合成一幅图的情况在实际中经常会遇到。

在R语言中,主要使用函数 par() 或 layout() 组合多幅图形为一幅图形。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3130846/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    39958