首页 > > > 【R语言】:图形初阶(1)
发现数据的模式。
检查数据的异常值。
人类非常善于从视觉呈现中洞察关系。
数据初步可视化:图形的创建和保存;自定义符号、线条、颜色和坐标轴;标注文本和标题;图形的维度;多个图形的组合。
参考书籍:《R语言实战(第2版)》第三章。
本文代码运行环境为Windows版RStudio。
R语言最常用的画图函数为plot函数(常用画图函数还有hist直方图和boxplot箱型图),以R语言自带数据框(data.frame)mtcars为例,演示一下如何用R语言画出(构建)一张简单的图形。
attach(mtcars) #获取系统自带数据框mtcars
plot(wt, mpg) #创建图形,车身重量wt为横轴,每加仑汽油行驶英里数(耗油量)mpg为纵轴
abline(lm(mpg~wt)) #函数abline表示画一条直线,嵌套的函数lm是线性回归函数
title("Regression of MPG on Weight") #显而易见,这是图形的标题
detach(mtcars) #解除绑定数据框mtcars
第一行代码,首先获取了数据框 mtcars 。
第二行代码确定了用plot函数创建图形并生成了一幅散点图,车身重量wt为横轴,每加仑汽油行驶英里数(耗油量)mpg为纵轴。
第三行代码最为复杂并较难理解,R语言实战(第2版)》一书中的原话是“向图形添加一条最优拟合曲线”。说实话,书中的这句话对于没有学过线性回归的读者来说简直是天方夜谭(也许作者认为本书的读者都具有一定的数学或统计学基础),哪怕这只是线性回归中最为简单的一元线性回归模型。我也很久没有接触线性回归了(早忘得差不多了),所以我用Google查询了(再次证明,就查专业资料而言某度真不行)一些资料来帮助我理解这行代码,下面我尽量用通俗易懂的话来解释一下我对这行代码的理解。
首先,abline(lm(mpg~wt))是一个函数嵌套,即函数abline里面的变量是函数lm的返回值。
函数abline的用法请看下面来自炼数成金论坛某网友的回帖:
函数abline()可以在图上加直线,其使用方法有四种格式。
(1)abline(a,b),表示画一条y=a+bx的直线
(2)abline(h=y),表示画出一条过所有点得水平直线
(3)abline(v=x),表示画出一条过所有点的竖直直线
(4)abline(lm.obj),表示绘出线性模型得到的线性方程
函数lm用于计算简单的线性回归,简单的线性回归涉及到两个变量:一个是解释变量(也叫预测变量),在第三行代码中为wt;另一个是被解释变量(也叫响应变量),在第三行代码中为mpg。因此在我看来,代码lm(mpg ~ wt)用中文解释就是用已知车身重量的数据wt来预测每加仑汽油哦行驶英里数(耗油量)mpg。
第四行代码给图形添加了标题“Regression of MPG on Weight”。第五行代码解除了最开始绑定的数据框mtcars。
运行全部代码即可得到一张简单的图形,见题图。
在上面的代码最开头添加一行代码pdf("REST.pdf"),最后面添加一行代码dev.off(),可以将图形直接保存到文件名为RTEST的PDF文件中,如下:
pdf("RTEST.pdf")
attach(mtcars) #获取系统自带数据框mtcars
plot(wt, mpg) #创建图形,车身重量wt为横轴,每加仑汽油行驶英里数(耗油量)mpg为纵轴
abline(lm(mpg~wt)) #函数abline表示画一条直线,嵌套的函数lm是线性回归函数
title("Regression of MPG on Weight") #显而易见,这是图形的标题
detach(mtcars) #解除绑定数据框mtcars
dev.off()除了 pdf() ,还可以使用函数 win.metafile() 、 png() 、 jpeg() 、 bmp() 、 tiff() 、 xfig()和 postscript() 将图形保存为其他格式。
当然了,如果使用RStudio,在右下角的Plots区域,可以直接点Export输出,用户可以自行选择图片格式或者PDF格式,并且可以很简便的更改文件名、图片格式、分辨率大小、保存路径等等,或者直接复制到剪贴板。

第一种,利用函数dev.new()在创建图形之前打开一个新的图形窗口。把上面例子的代码最开始增加函数dev.new(),把函数plot两个变量的顺序换一下,再把函数lm两个变量顺序也更换一下,图形原标题后面加上2,其他不变,代码调整后如下:
dev.new()
attach(mtcars)
plot(mpg, wt)
abline(lm(wt~mpg))
title("Regression of MPG on Weight-2")
detach(mtcars)
所以,每次创建新图形之前打开一个新的图形窗口就行了
dev.new()
语句1
dev.new()
语句2
当然也不难看出,你的电脑界面将弹出很多个新窗口(捂脸)。
第二种,以在RStudio上运行顺序调换之后的代码为例,运行代码后弹出一个新窗口,在菜单栏选择历史并勾选记录,然后可以使用菜单栏里上一个(PgUp)和下一个(PgDown)依次查看已经绘制的图形。

以上方法中,我认为第二种方法最为简单和易于操作。
扩展小技巧-图形组合
图形的组合在文章【R语言】:图形初阶(3) 中有详细介绍。
以下是我Google查资料的时候在一篇博客上看到的,原文链接:司空格子Ored -《R语言实战》读书笔记--第三章 图形初阶(一),这里原文引用
如果将不同的图形放在一个窗口中,可以先用par(mfrow = c(2,3))类似语句创建一个2行3列的图形集合,然后用plot一个一个画图就行了,结果见下图:
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3119951/ ,如需转载,请注明出处,否则将追究法律责任。