1 min read

Steem 和 R 语言:跟大鹏学 R 语言(14)作图

原文链接: steemit, cnsteem, busy, chainbb, steemdb, steemd, busy, markdown

本文选自《学 R:零基础学习 R 语言》(研究出版社,大鹏、李怡著,2018)第二章,有改动。

前情回顾:

在上两章中,我们都用到了plot()函数来作图。如果说Excel的作图方法是《秘密花园》那种书,让你在已经画好的图案里涂涂改改,很受约束的话,那么R作图的流程更加自由:就像铺开一张白纸,自己打好格,画数据点,画坐标轴,加图例,最后把纸收起来。作图的每一步,都清清楚楚掌控在你手里。

这里,我们用第2章读取的二氧化碳数据 mydata2,画一些更漂亮的图片。为了保持本章的独立性和跟上一章节的连续性,我们预先把数据读入到mydata2中(当然,也可以用 read.csv()函数把co2数据读取进来):

mydata2 <- as.data.frame(t(matrix(
  co2, 12, 
  dimnames = list(month.abb, unique(floor(time(co2)))))))  
mydata2$year <- as.numeric(rownames(mydata2))

3.1 控制图像:线型,点状,颜色

我们先做一张最简单的图,只画各年9月份二氧化碳的浓度(图 3.1)。

plot(mydata2$Sep)

图 3.1: plot()函数第一种用法示例:一维数据散点图.

这是plot()函数的第一种用法,也是最简单用法:绘制一维数据散点图。如果plot()的作图对象只是一个数值型的向量,那么画出的图纵向是这个向量,横向是数据的序号。

plot()函数还有别的什么用法呢?可以请F1小助理打开帮助文件。不过,今天我们请出我们的新助理:example()函数:

example(plot)

运行这条代码,并在RStudio的左下面板里按照提示按回车键,就会看到很多示例。以后,想不起来某个函数的作用的时候,除了F1之外,小助理example()函数也是个很好的选择。

下面我们指定以年份为横坐标x,9月份的二氧化碳浓度为纵坐标y,做xy散点图(图3.2):

plot(x = mydata2$year, y = mydata2$Sep)

图 3.2: plot()函数第二种用法示例:二维数据散点图.

这是plot()函数的第二种用法:绘制二维数据散点图。比较一下,跟第一种用法有什么区别?

plot()函数的第三种用法,其实在前面已经出现过了,我们重复一次:

plot(mydata2)

在这种用法里,plot()的作图对象是个多行多列的数据框(mydata2),画出的是任意两列分别作为x和y的散点图。这时,plot()函数等同于pairs()函数:

pairs(mydata2)

喜欢刨根问底的初学者可能对plot()函数的多种用法感到困惑。我们打个比方就容易理解了,这就好比佛教里的观音菩萨有32种化身,应众生的需要而以不同面孔示人。需要救人参果树的时候,菩萨就持杨柳枝;需要收鲤鱼精的时候,菩萨就编个鱼篮;适当的时候,菩萨还会伸出千手,或者送上个娃。plot()函数也是如此,根据你的需要来发挥不同的作用。除了这三种化身外,还有第四第五以及更多化身,我们在以后的课程中遇到再说。

当然,菩萨不止观音一位,R的作图函数除了plot()外还有很多,见小贴士3.1。他们的用法大同小异,可以咨询example()小助理。不过,我们这次有请example()助理的小姐妹——示范函数demo()来帮忙:

demo(graphics)

就像example()小助理一样,按照提示按回车键,就会看到各种作图函数的示范了。

小贴士 3.1 常用作图函数(请使用example()函数来查看,如example(plot),或运行demo(graphics))

函数 用途
plot() 主要用作散点图
pairs() 散点图矩阵
symbols() 气泡图
hist() 直方图
curve() 函数曲线图
barplot() 柱状图
boxplot() 箱式图
coplot() 条件散点图
dotchart() 点图(克利夫兰点图)
stripchart() 一维散点图
image() 矩阵方格图
contour() 等高线图