给定例如点数的ggplot,您如何找出给定点对应的数据行?
样本图:
library(ggplot2)
(p <- ggplot(mtcars, aes(mpg, wt)) +
geom_point() +
facet_wrap(~ gear)
)
Run Code Online (Sandbox Code Playgroud)
我们可以得到包含grid.ls+的点的凹凸grid.get.
grob_names <- grid.ls(print = FALSE)$name
point_grob_names <- grob_names[grepl("point", grob_names)]
point_grobs <- lapply(point_grob_names, grid.get)
Run Code Online (Sandbox Code Playgroud)
最后一个变量包含xy坐标和pointsize等的详细信息(尝试unclass(point_grobs[[1]])),但是我不知道如何获得mtcars每个点对应的数据行.
为了回答kohske关于我为什么这样做的问题,我正在使用gridSVG创建一个交互式散点图.当您将鼠标滑过一个点时,我想显示上下文信息.在mtcars示例中,我可以显示一个工具提示,其中包含汽车名称或数据框该行的其他值.
到目前为止,我的hacky想法是将id列作为不可见的文本标签:
mtcars$id <- seq_len(nrow(mtcars))
p + geom_text(aes(label = id), colour = NA)
Run Code Online (Sandbox Code Playgroud)
然后遍历grob树从point grob到text grob,并显示由标签索引的数据集行.
这是繁琐的,并不是很普遍.如果有一种方法可以将id值存储在点grob中,那么它会更清晰.
我有一些数据,我想把它放在散点图中,当我翻转图表上的点时,我想要一个气泡弹出窗口并给出一些识别信息.
例如,如果我有一个学生姓名,身高和体重的数据框,我想分别在x和y轴上绘制身高和体重.然后,当我翻转绘图中的单个点时,会弹出一个带有学生姓名的气泡.
在一个plot()被调用的基本函数中使用了一个类似的函数identify()但是它需要点击该点并且在我离开该点之后不会消失.
这是一个示例df和图/识别代码:
> dput(df1)
structure(list(id = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), var1 = c(0.469521932071075,
0.077109789242968, 0.076340542640537, 0.461061101639643, 0.347079795086756,
0.425340321380645, 0.738443679409102, 0.00931701785884798, 0.267918228404596,
0.722170797875151), var2 = c(0.265150599181652, 0.557858553016558,
0.715832461370155, 0.186717337928712, 0.626156869810075, 0.1359783844091,
0.67408229294233, 0.528320853365585, 0.241800826275721, 0.80992470192723
), names = c("jim", "nancy", "suzy", "mark", "alex", "jen", "luz",
"jeff", "paula", "amir")), .Names = c("id", "var1", "var2", "names"
), row.names = c(NA, -10L), class = "data.frame")
plot(df1$var1, df1$var2);grid()
identify(df1$var1, df1$var2, labels = df1$names) …Run Code Online (Sandbox Code Playgroud)