使用R中的绘图从数据帧调用

时间:2013-01-21 14:49:10

标签: r

我的数据框有407个14个变量的观测值。使用ggplot2或其他图形,我可以轻松地创建其中一个变量的散点图,以允许我观察模式。

我希望能够突出显示散点图中的一些点,因为它们在绘图中创建了模式,然后从数据框中调用相关信息。有没有可以做到这一点的包?

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

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

非常感谢! 尼基

3 个答案:

答案 0 :(得分:1)

以下是两个选项:基础R中的identify()iplots包。

首先,您可以使用identify()在点击plot()时识别和标记点数:

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

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

enter image description here

我们通过单击鼠标右键并从菜单中选择“停止”或在图形窗口中选择“停止”来停止识别过程。由于我们已将输出存储在名为interesting的变量中,因此我们可以轻松地检查这些点:

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,您可以在一个图上突出显示数据,并让它们在所有图上更改颜色。在这里,我选择了下图中的红点,在两个图上改变了它们的颜色。

enter image description here

在突出显示数据子集后,我们可以使用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()更有效。

答案 1 :(得分:1)

我认为你想要的是与散点图矩阵进行交互。我不知道如何使用ggplot2执行此操作,但使用点阵可以轻松地使用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

答案 2 :(得分:1)

我不认为有一种方法可以使用ggplot2来做到这一点,但是还有其他工具可以实现这一点(通常称为刷牙)。

Rggobi软件包是ggobi程序的一个界面,它可以刷牙(和旋转以及许多其他东西),你可以将你的数据从R发送到ggobi,刷入ggobi,然后访问哪些点被刷回来。

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

iplots包是另一种选择,正如@MattBagg所证明的那样。

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

可能还有其他工具(可能是R GUI),但上面的内容应该可以帮到你。