本节书摘来自异步社区《R绘图系统(第2版)》一书中的第2章,第2.4节,作者【新西兰】Paul Murrell,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.4 双变量绘图
表2.2和图2.5 展示了可以用于绘制双变量图形的传统绘图函数。
图2.5 用于绘制双变量的高级绘图函数。在所有示例图中,当某一个函数可以绘制超过一种数据类型时,示例中所绘制图形对应的数据类型将被标记出来(用灰体)。
plot()函数也可以接受不同格式的两个变量作为参数:一对数值向量;一个数值向量和一个因子;两个因子;一个包含两个向量或者因子的列表(以x和y命名);一个二维表;一个有两列的矩阵或者是数据框(第一列被认为是x参数);或者是一个形如y~x的关系式。
如果两个变量都是数值的,输出结果就是一幅散点图。如果x是一个因子而y是一个数值向量,输出结果将是一个箱线图,箱线图中每一个箱形对应x的一个水平。如果x是数值类型而y是因子,结果将是一个(分组的)散列图,如果两个变量都是因子,结果将是一个脊柱图。如果赋给plot()函数的是一个计数表,输出结果会是一个马赛克图。
两个函数可以用于替代散点图以解决重绘制的问题,这些问题经常发生在数值有重复或者有大量的点要绘制的时候。sunflowerplot()函数在每一个给定的位置绘制一个特殊的符号来表示有多少点被重绘制了,而smoothScatter()函数则绘制了散点图中表示数据点密度的图形(而不是绘制单个数据点)。另外,有一个绘制多散列图的方法是给stripchart()函数提供一个包含数值向量的列表。
当x是一个因子而y是一个数值向量的时候,另一个绘制多箱线图的方法是使用boxplot()函数,而提供给boxplot()函数的数据则或者是一个包含数值向量的列表或者是一个形如y~x的表达式,而这里x是一个因子。
如果数据是由数值矩阵构成的,其中每一列或者每一行代表一个不同的分组,那么barplot()函数可以根据数值绘制一个堆积式的或者边靠边式的条形图,而函数dotchart()可以绘制一个点图。
如果x是数值型的而y是一个因子,那么spineplot()函数可以绘制一幅脊椎图,而cdplot()函数则会绘制一幅条件密度图。这两个函数都可以接受形如y~x关系式的数据。
如果要绘制的两个变量都是因子,也有很多选项可以绘制所需要的图形。给定初始的因子,spineplot()函数将绘制一幅类似plot()函数接受两个因子所绘制图形的脊柱图。而另一个选项就是处理两个因子所对应的计数表。给定一个计数表,mosaicplot()函数将绘制一幅类似plot()函数所绘制的马赛克图形。mosaicplot()还可以接受形如y~x的表达式作为参数,这里y和x都是因子。
在两个因子都只有两个水平的特殊情况下,assocplot()函数可以绘制一幅Cohen-Friendly关联图,而fourfoldplot()函数可以绘制一幅四扇图。本书第13章有更多专门用来展示分类变量的示例图形。
此外,除了数值向量和因子等数据类型,还有一种重要的基本数据类型日期(或者称为日期-时间)。如果赋予plot()函数的x或者y变量 “Date” 或者 “POSIXt” 类型的对象,那么对应的坐标轴将会以日期作为标签(例如,使用月份的名称)。