たとえば、ポイントの ggplot が与えられた場合、特定のポイントが対応するデータの行をどのように見つけますか?
サンプルプロット:
library(ggplot2)
(p <- ggplot(mtcars, aes(mpg, wt)) +
geom_point() +
facet_wrap(~ gear)
)
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)
この最後の変数には、xy 座標やポイントサイズなどの詳細が含まれています (試してみてください) が、各ポイントが対応するunclass(point_grobs[[1]])
データの行を取得する方法は明らかではありません。mtcars
なぜ私がこれを行うのかについてのkohskeの質問に答えるgridSVG
ために、インタラクティブな散布図を作成するために使用しています。ポイントの上にマウスを移動すると、コンテキスト情報が表示されます。mtcars の例では、車の名前またはデータ フレームのその行のその他の値を含むツールチップを表示できます。
これまでの私のハックなアイデアは、id
列を非表示のテキスト ラベルとして含めることです。
mtcars$id <- seq_len(nrow(mtcars))
p + geom_text(aes(label = id), colour = NA)
次に、ポイント グロブからテキスト グロブまでグロブのツリーをトラバースし、ラベルによってインデックス付けされたデータセットの行を表示します。
これは扱いにくく、あまり一般化できません。id
ポイント グロブ内に値を格納する方法があれば、よりクリーンになります。