我的数据框有407个14个变量的观测值。使用ggplot2或其他图形,我可以轻松地创建其中一个变量的散点图,以允许我观察模式。
我希望能够突出显示散点图中的一些点,因为它们在绘图中创建了模式,然后从数据框中调用相关信息。有没有可以做到这一点的包?
数据框中没有其他变量可以让我区分图中的一组有趣点。这会使问题变得更加简单。
我知道这可能是一个比我想象的更大的问题,我很感激任何指示正确的方向!
非常感谢! 尼基
答案 0 :(得分:1)
以下是两个选项:基础R中的identify()
和iplots
包。
首先,您可以使用identify()
在点击plot()
时识别和标记点数:
data(cars)
plot(cars)
interesting <- identify(cars)
现在,如果我们点击图,它将搜索最近的数据点,返回其索引,默认情况下(除非我们添加plot = FALSE参数),用该索引标记该点。
我们通过单击鼠标右键并从菜单中选择“停止”或在图形窗口中选择“停止”来停止识别过程。由于我们已将输出存储在名为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,您可以在一个图上突出显示数据,并让它们在所有图上更改颜色。在这里,我选择了下图中的红点,在两个图上改变了它们的颜色。
在突出显示数据子集后,我们可以使用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),但上面的内容应该可以帮到你。