1

我有一个包含 14 个变量的 407 个观察值的数据框。使用 ggplot2 或其他图形,我可以轻松地创建一个变量相对于另一个变量的散点图,以便我观察模式。

我希望能够突出显示散点图中由于它们在图中形成的模式而感兴趣的一些点,然后从数据框中调用相关信息。有没有可以做到这一点的包?

数据框中没有其他变量可以让我区分图中的一组有趣点。这将使问题变得简单得多。

我知道这可能是一个比我想象的更大的问题,我很感激任何正确方向的指示!

非常感谢!尼基

4

3 回答 3

1

这里有两个选项:identify()在基础 R 和iplots包中。

首先,您可以在单击identify()a 时使用它们来识别和标记点:plot()

data(cars)
plot(cars)
interesting <- identify(cars)

现在,如果我们单击绘图,它将搜索最近的数据点,返回它的索引,并且默认情况下(除非我们添加 plot = FALSE 参数),用它的索引标记那个点。

在此处输入图像描述

我们通过单击鼠标辅助按钮并从菜单中选择“停止”或在图形窗口中选择“停止”来停止识别过程。由于我们将输出存储在一个名为有趣的变量中,我们可以轻松地检查这些点:

cars[interesting,]
#    speed dist
# 19    13   46
# 23    14   80
# 44    22   66

iplots软件包提供了非常好的交互式链接图,提供了一个更好的解决方案:

library(iplots)
data(iris)
iplot(iris$Sepal.Length,iris$Petal.Length)
ihist(iris$Sepal.Width)

使用 iplots,您可以突出显示一个绘图上的数据并让它们在所有绘图上更改颜色。在这里,我选择了下图中的红点,并在两个图上更改了它们的颜色。

在此处输入图像描述

突出显示数据子集后,我们可以用 确定当前选择的点iset.selected(),如下所示:

iris[iset.selected(),]
#     Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
# 85           5.4         3.0          4.5         1.5 versicolor
# 91           5.5         2.6          4.4         1.2 versicolor
# 54           5.5         2.3          4.0         1.3 versicolor
# etc

由于您有 14 个变量,iplot()因此多个散点图可能比使用identify().

于 2013-01-21T15:14:10.153 回答
1

我认为您想要的是与散点图矩阵进行交互。我不知道你怎么能做到这一点,ggplot2但使用 lattice 你可以很容易地做到这一点trellis.focus..

你可以试试这个,例如:

super.sym <- trellis.par.get("superpose.symbol")
splom(~iris[1:4], groups = Species, data = iris,      ## splom will draw scatter plots
       panel = panel.superpose,                       ## in iris data since you don't provide 
      key = list(title = "Three Varieties of Iris",   ## reproducible example
                 columns = 3, 
                points = list(pch = super.sym$pch[1:3],
                             col = super.sym$col[1:3]),
                 text = list(c("Setosa", "Versicolor", "Virginica"))))

然后,交互部分:

trellis.focus('panel', 1, 1)                                 ## get the focus
idx <- panel.link.splom(pch=13, cex=0.6, col='green')        ## 

我选择了一些比我逃避的点。我在 idx 中得到结果:

 idx
[1]  59  21 139  84  78  92
于 2013-01-21T15:14:23.703 回答
1

我认为没有办法使用 ggplot2 来做到这一点,但还有其他工具可以做到这一点(通常称为刷牙)。

Rggobi 包是 ggobi 程序的一个接口,它执行刷机(以及旋转和许多其他事情),您可以将数据从 R 发送到 ggobi,刷入 ggobi,然后访问在 R 中刷回的点。

TeachingDemos 包中的TkBrush函数将创建一个散点图矩阵并允许您刷点(将在每个面板中显示为刷点),并将返回有关刷点的信息。同一包中的HTkIdentify函数将显示当前悬停点的信息,这可以是多行信息,但不返回结果。

iplots 包是另一个选项,正如@MattBagg 所展示的那样。

可以创建一个工具来确定数据框的哪些行对应于选定的 ggplot2 图的部分,但是数据要经过这么多步骤(并且结果不容易访问/理解)回到原来的数据框就不简单了。

可能还有其他工具(可能是 R GUI),但以上内容应该可以帮助您入门。

于 2013-01-21T19:48:03.630 回答