首页 > > > 【R语言】:图形初阶(3)
发现数据的模式。
检查数据的异常值。
人类非常善于从视觉呈现中洞察关系。
数据初步可视化:图形的创建和保存;自定义符号、线条、颜色和坐标轴;标注文本和标题;图形的维度;多个图形的组合。
参考书籍:《R语言实战(第2版)》第三章。
本文代码运行环境为Windows版RStudio。
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))

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


下面的例子演示了如何设置之前讨论的各种图形参数特征,但增加了两个后面会学习的新函数,其中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)运行代码后,生成下图。

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

这里暂时不单独举例,学习完接下来图例的相关内容之后再举例说明。
四、图例
在实际应用中,绘制的图形中往往包含不止一组数据,这时图例能够帮助用户辨别每个条形、扇形区域或折线分别代表哪一组数据。
函数legend()可以用来增加图例,输入代码help("legend")查看函数的帮助文件,下图为函数legend帮助文件中用法Usage的截图



#生成数据
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)运行代码后,生成下图

五、文本标注
在图形上增加文本通过函数 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/ ,如需转载,请注明出处,否则将追究法律责任。