3.1 使用图形

R是一个惊艳的图形构建平台。这里我特意使用了“构建”一词。在通常的交互式会话中,你可以通过逐条输入语句构建图形,逐渐完善图形特征,直至得到想要的效果。

考虑以下五行代码:

  1. attach(mtcars)
  2. plot(wt, mpg)
  3. abline(lm(mpg~wt))
  4. title("Regression of MPG on Weight")
  5. detach(mtcars)

首句绑定了数据框mtcars。第二条语句打开了一个图形窗口并生成了一幅散点图,横轴表示车身重量,纵轴为每加仑汽油行驶的英里数。第三句向图形添加了一条最优拟合曲线。第四句添加了标题。最后一句为数据框解除了绑定。在R中,图形通常都是以这种交互式的风格绘制的(参见图3-1)。

3.1 使用图形 - 图1

图3-1 创建图形

可以通过代码或图形用户界面来保存图形。要通过代码保存图形,将绘图语句夹在开启目标图形设备的语句和关闭目标图形设备的语句之间即可。例如,以下代码会将图形保存到当前工作目录中名为mygraph.pdf的PDF文件中:

  1. pdf("mygraph.pdf")
  2. attach(mtcars)
  3. plot(wt, mpg)
  4. abline(lm(mpg~wt))
  5. title("Regression of MPG on Weight")
  6. detach(mtcars)
  7. dev.off()

除了pdf(),还可以使用函数win.metafile()png()jpeg()bmp()tiff()xfig()postscript()将图形保存为其他格式。(注意,Windows图元文件格式仅在Windows系统中可用。)关于保存图形输出到文件的更多细节,可以参考1.3.4节。

通过图形用户界面保存图形的方法因系统而异。对于Windows,在图形窗口中选择“文件”→ “另存为”,然后在弹出的对话框中选择想要的格式和保存位置即可。在Mac上,当Quartz图形窗口处于高亮状态时,点选菜单栏中的“文件”→“另存为”即可。其提供的输出格式仅有PDF。在UNIX系统中,图形必须使用代码来保存。在附录A中,我们将考虑每个系统中可用的备选图形用户界面,这将给予你更多选择。

通过执行如plot()hist()(绘制直方图)或boxplot()这样的高级绘图命令来创建一幅新图形时,通常会覆盖掉先前的图形。如何才能创建多个图形并随时查看每一个呢?方法有若干。

第一种方法,你可以在创建一幅新图形之前打开一个新的图形窗口:

  1. dev.new()
  2. statements to create graph 1
  3. dev.new()
  4. statements to create a graph 2
  5. etc.

每一幅新图形将出现在最近一次打开的窗口中。

第二种方法,你可以通过图形用户界面来查看多个图形。在Mac上,你可以使用Quartz菜单中的“后退”(Back)和“前进”(Forward)来逐个浏览图形。在Windows上,这个过程分为两步。在打开第一个图形窗口以后,勾选“历史”(History)→“记录”(Recording)。然后使用菜单中的“上一个”(Previous)和“下一个”(Next)来逐个查看已经绘制的图形。

第三种也是最后一种方法,你可以使用函数dev.new()dev.next()dev.prev()dev.set()dev.off()同时打开多个图形窗口,并选择将哪个输出发送到哪个窗口中。这种方法全平台适用。关于这种方法的更多细节,请参考help(dev.cur)

R将在保证用户输入最小化的前提下创建尽可能美观的图形。不过你依然可以使用图形参数来指定字体、颜色、线条类型、坐标轴、参考线和标注。其灵活度足以让我们实现对图形的高度定制。

我们将以一个简单的图形作为本章的开始,接着进一步探索按需修改和强化图形的方式。然后,我们将着眼于一些更复杂的示例,以阐明其他的图形定制方法。我们关注的焦点是那些可以应用于多种R图形的技术。对于本书中描述的所有图形,本章讨论的方法均有效,不过第16章中使用lattice包创建的图形是例外。(lattice包拥有自己的图形外观定制方法。)在其他各章中,我们将探索各种特定的图形,并探讨它们在何时何地最有用。