本节书摘来自异步社区《R绘图系统(第2版)》一书中的第2章,第2.2节,作者【新西兰】Paul Murrell,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.2 plot()函数
在传统绘图系统中最重要的高级函数是plot()函数。在许多情况下,该函数提供了在R中绘制完整图形最简单的方法。
plot() 函数中的第一个参数是需要绘图的数据,指定数据的方式可以很灵活。例如,下面代码中每一个plot()函数的调用都被用来绘制如图1.1的同一幅散点图(只是在坐标轴标签的设置上有轻微变动)。在第一种情况下,所有的绘图数据都被包含在一个简单的数据框内。在第二种情况下,两个不同的变量分别被设置为x参数与y参数。在第三种情况下,绘图数据被设置成一个关系式的形式 y~x,同时将包含关系式中所含变量的数据框作为参数传入函数。
> plot(pressure)
> plot(pressure$temperature,pressure$pressure)
> plot(pressure~temperature,data=pressure)
传统绘图系统并不能区分不同绘图样式,例如只在每一个(x,y)坐标位置绘制数据符号的散点图和绘制一个连接每一个(x,y)坐标位置的直线段的散点图(线图),之间的主要差异。这些样式都是由基本绘图函数plot()中一个名为 type 的参数控制的变量。下面的代码通过设定 type 参数不同取值来绘制4幅不同的图像,来演示type 参数如何控制绘图样式(见图2.1)。
图2.1 散点图的4种变化。在每一个例子中,绘图都是通过调用plot()函数并使用相同的数据作为参数实现的;仅有的变化是对type参数取了不同的值。在左上方的示例图中,type="p"以绘制散点(数据符号),在右上方的示例图中,type="l"以绘制折线,在左下方的示例图中,type="b"以同时绘制散点和折线,在右下方的示例图中,type="h"以绘制类似直方图的垂直线段。
> y<-rnorm(20)
> plot(y,type="p")
> plot(y,type="l")
> plot(y,type="b")
> plot(y,type="h")
同样的,传统绘图函数也不能够区分一个简单数据集所绘制的图形与一个包含多项序列的复杂数据集所绘制的图形。更多数据项可以通过使用低级函数来添加到已绘制的图形中,例如使用points()函数和lines()函数(见3.4.1小节;同时也见于2.5节中关于函数matplot()的介绍)。
事实上,plot()函数是一个泛型函数。对这句话的解释前面已经做了描述;plot()函数能够接受类型相同但格式被不同的数据作为参数(当然这仍将输出相同的结果)。但是,plot()函数作为泛型函数的事实也意味着,如果给plot()函数传入不同类型的数据,则会绘制出不同类型的图形。例如,如果传给x变量的参数是一个因子,plot()函数会默认绘制一幅箱线图,而不是散点图。另一个例子则如下面的代码所示。该例中,通过调用lm() 函数创建了一个"lm"对象。当把该对象传递给plot()函数时,plot()函数会针对"lm"对象调用特定的绘图方式绘制回归诊断图(见图2.2)。[1]
图2.2 绘制"lm"对象。在plot()函数中,有一类专门用来绘制"lm"对象的方法,能够根据线性模型分析所得到的结果绘制出一系列回归诊断图。
> lmfit<- lm(sr~pop15+pop75+dpi+ddpi,
data=LifeCycleSavings)
> plot(lmfit)
如果想了解更多关于plot()函数中"lm"绘图方法的内容,输入help(plot.lm)。
在大多数情况下,绘图扩展包中提供的新型绘图功能都是通过在plot()函数中定义一个新的绘图方法实现的。例如,cluster包提供给plot()函数一个方法用于创建表示自底向上聚类过程结果的图像(对应于一个agnes对象)。该方法能够绘制一个特殊的条幅图和一个反映数据结构的树形图(见下面的代码以及图2.3)。第一部分的代码用来生成数据以及创建一个agnes对象;后一部分的代码用来绘制agnes对象的图形。
图2.3 绘制"agnes"对象。在plot()函数中,有一类专门用来绘制"agnes"对象的方法,能够绘制合成聚类分析所产生结果的图形。
> subset<-sample(1:150,20)
> cS<-as.character(Sp<-iris$Species[subset])
> cS[Sp=="setosa"]<-"S"
> cS[Sp=="versicolor"]<-"V"
> cS[Sp=="virginica"]<-"g"
> ai <- agnes(iris[subset,1:4])
> plot(ai,labels=cS)
简单调用函数plot(x),其中x是一个包含了需要可视化数据的R对象,通常就能以最简单的方式获取对数据的一个初步认知。
接下来的几节简要介绍了使用plot()函数或者graphics包中其他高级函数所能够绘制的主要图形类型。本章接近结尾的部分将讨论这些函数中能够控制图形详细内容的重要参数(见2.6节)。
本书第4部分将会介绍许多R绘图扩展包中绘制其他类型图形的高级函数。[2]