16.4 交互式图形

R的基础安装提供了有限的图形交互功能。虽然可以通过添加额外的程序代码修改图形,但是很少能通过鼠标修改图形或收集新的信息。不过,好在R中有一些软件包可以极大增强与图形的交互能力。本节我们重点关注playwithlatticistiplotrggobi包提供的函数。在第一次使用它们时,请确保已经下载并安装。

16.4.1 与图形交互:鉴别点

在接触一些专门的软件包前,我们先学习R基础安装中一个可对散点图中的点进行鉴别和标注的函数:identify()。利用该函数,你可用鼠标对散点图中所选择的点标注行数或者行名称,直到你选择了Stop或者右击图形识别工作才会停止。例如,运行以下代码:

  1. plot(mtcars$wt, mtcars$mpg)
  2. identify(mtcars$wt, mtcars$mpg, labels=row.names(mtcars))

光标将从一个点变成一个十字。单击散点图上的点,可以对它们进行标注,直到你从Graphics Device(图形设备)菜单中选择了Stop,或者右击了图形并从右键菜单中选择了Stop。

许多包中的图形函数(包括第8章讨论过的car包中的函数)都可应用该方法来对点进行标注。但遗憾的是,对于latticeggplot2图形,identify()函数无效。

16.4.2 playwith

playwith包提供了一个GTK+图形用户界面(GUI),使得用户可以编辑R图形并与其交互。输入代码install.packages("playwith", depend = TRUE)即可在任何平台上安装playwith包。对于Mac OS X和Linux平台,最好也装上JGR图形用户界面(见附录A),然后在这个GUI中运行playwith

playwith()函数允许用户识别和标注点、查看一个观测所有的变量值、缩放和旋转图形、添加标注(文本、箭头、线条、矩形、标题和标签)、修改视觉元素(颜色、文本大小等)、应用先前存储的图形风格,以及以多种格式输出图形结果。下面的例子很好地展示了该函数的功能:

  1. library(playwith)
  2. library(lattice)
  3. playwith(
  4. xyplot(mpg~wt|factor(cyl)*factor(am),
  5. data=mtcars, subscripts=TRUE,
  6. type=c("r", "p"))
  7. )

图16-12所示的窗口将会出现在屏幕上。该GUI非常清晰易懂,你可以试试左边的按钮以及菜单项。与identify()函数不同,playwith()既对R基础图形有效,也对latticeggplot2图形有效。Theme(主题)菜单上的一些选项仅与基础图形契合的很好,一些则与ggplot2图形契合的较好(如标注),还有些对ggplot2图形无效(如识别点)。

16.4 交互式图形 - 图1

图16-12 playwith窗口。依赖于GTK+ GUI,用户可以使用鼠标编辑图形

想详细了解playwith包,可访问项目网站http://code.google.com/p/playwith/

16.4.3 latticist

使用latticist包,你便可通过栅栏图方式探索数据集。该包不仅提供了一个如16.2节图形那样的图形用户界面,也可以通过vcd包来创建新的图形(见11.4节)。如果有需要,latticist还能与playwith整合到一起,例如代码:

  1. library(latticist)
  2. mtcars$cyl <- factor(mtcars$cyl)
  3. mtcars$gear <- factor(mtcars$gear)
  4. latticist(mtcars, use.playwith=TRUE)

生成的界面如图16-13所示。

16.4 交互式图形 - 图2

图16-13 拥有latticist函数功能的playwith窗口。用户可创建lattice并与vcd图形交互

除了拥有playwith的函数功能(识别点、标注、缩放、旋转和风格化),用户还能通过下拉菜单和按钮直接创建lattice图形。欲详细了解latticist包,可参考http://code.google.com/p/latticist/

通过一个面向R的流行GUI——Deducer(见附录A)的插件Plot Builder,用户也可以与ggplot2图形进行交互。由于它无法在R平台运行,因此此处我们不加讨论。若你感兴趣,可访问Deducer网站www.deducer.org

16.4.4 iplots包的交互图形

playwithlatticist包只能与单幅图形交互,而iplots包提供的交互方式则有所不同。该包提供了交互式马赛克图、柱状图、箱线图、平行坐标图、散点图和直方图,以及颜色刷,并可将它们结合在一起绘制。这意味着你可通过鼠标对观测点进行选择和识别,并且对其中一幅图形的观测点突出显示时,其他被打开的图形将会自动突出显示相同的观测点。另外,你还可通过鼠标来收集图形对象(诸如点、条、线)和箱线图的信息。

iplots包是通过Java编写实现的,表16-5列出了该包中主要的函数。 表16-5 iplot函数

函  数 描  述
ibar() 交互式柱状图
ibox() 交互式箱线图
ihist() 交互式直方图
imap() 交互式地图
imosaic() 交互式马赛克图
ipcp() 交互式平行坐标图
iplot() 交互式散点图

为更好理解iplots的工作机理,可运行代码清单16-6中的代码。

代码清单16-6 iplots展示

  1. library(iplots)
  2. attach(mtcars)
  3. cylinders <- factor(cyl)
  4. gears <- factor(gear)
  5. transmission <- factor(am)
  6. ihist(mpg)
  7. ibar(gears)
  8. iplot(mpg, wt)
  9. ibox(mtcars[c("mpg", "wt", "qsec", "disp", "hp")])
  10. ipcp(mtcars[c("mpg", "wt", "qsec", "disp", "hp")])
  11. imosaic(transmission, cylinders)
  12. detach(mtcars)

六个含有图形的窗口将会打开。为使窗口均可见,可在桌面上重新安排它们的顺序(若有需要还可重调各图的大小)。部分展示如图16-14所示。

现在尝试以下步骤。

  • 单击柱状图(gears)窗口的三号齿轮条,直条将会变红色。另外,其他图形窗口中的所有三齿轮发动机都会被突出显示。

  • 鼠标下移,并在散点图(wt对mpg)窗口选择一个含有点的矩形区域。这些点将会被突出显示,而其他图形窗口中相应的观测点也将会变成红色。

16.4 交互式图形 - 图3

图16-14 代码清单16-6所创建的iplots图形。为节省空间,此处只展示了六个图形窗口中的四个。这些图形中,用户已经在柱状条窗口中单击了三号齿轮条

  • 按住Ctrl键不动,将鼠标移动到某幅图形中点、条、箱线图或线上,该对象的详细信息将会在一个弹出窗口中显示出来。

  • 右击任何对象,便可在右键菜单中获得一些选项。例如,你可以右击箱线图(mpg)窗口,将图形转变为一个平行坐标图(PCP)。

  • 拖动鼠标可选择不止一个对象(点、条等),或使用Shift键通过单击选择不邻接的对象。你可尝试在柱状图(gears)窗口选择三号和五号齿轮条。

iplots包中的函数可用来探索变量分布和交互选择的观测子集中的变量关系。若用其他方式来做如此探索,那将是一件困难和耗时耗力的工作。有关iplots包的更多信息,请访问项目网站http://rosuda.org/iplots/

16.4.5 rggobi

作为交互图形的最后一个例子,我们来看看R平台之外的开源软件——GGobi(www.ggobi.org),它是一个全面的高维数据可视化和动态探索的软件,在Windows、Mac OS X和Linux平台上都可安装。GGobi有许多吸引眼球的优点,包括:交互式散点图、柱状图、平行坐标图、时间序列图、散点图矩阵和三维旋转的综合使用;窗口刷和点识别;多变量变换方法;复杂的探索平台,如导向动画的和手动的1维及2维图形。令人振奋的是,rggobi软件包为GGobi和R提供了一个无缝接口。

首先根据你的平台下载并安装合适的软件(www.ggobi.org/downloads/),然后在R中安装rggobi包:install.packages("rggobi", depend = TRUE)

当两个软件都已安装好,你便可利用ggobi()函数在R中运行GGobi。它将为你的R数据提供许多复杂的图形交互方法。要了解实际效果,请运行以下代码:

  1. library(rggobi)
  2. g <- ggobi(mtcars)

GGobi界面将会打开,然后你便可用最时髦的交互方法探索mtcars数据集。欲了解更多,可在GGobi网站上查阅简介、教程、手册和教学视频。Cook和Swayne的Interactive and Dynamic Graphics for Data Analysis with R and GGobi(2008)一书中对其也有全面的介绍。