たとえば、ポイントのggplotが与えられた場合、与えられたポイントが対応するデータの行をどのように見つけ出しますか?どのようにggplot2 grobsをデータに関連づけていますか?
サンプルプロット:
library(ggplot2)
(p <- ggplot(mtcars, aes(mpg, wt)) +
geom_point() +
facet_wrap(~ gear)
)
我々はgrid.ls
+ grid.get
でポイントが含まgrobsを得ることができます。
grob_names <- grid.ls(print = FALSE)$name
point_grob_names <- grob_names[grepl("point", grob_names)]
point_grobs <- lapply(point_grob_names, grid.get)
この最後の変数は、x-y座標の詳細、およびポイントサイズを、等(unclass(point_grobs[[1]])
を試みる)が含まれ、私は、各ポイントが対応mtcars
におけるデータの行を取得する方法は明らかではありません。
私はインタラクティブな散布図を作成するためにgridSVG
を使用しています、私はこれをやっている理由についてkohskeの質問に答えるために。マウスをポイント上に置くと、コンテキスト情報が表示されます。 mtcarsの例では、車の名前やデータフレームのその行からの他の値を示すツールチップを表示できます。
私のハックアイデアは、これまで目に見えないテキストラベルとしてid
列を含めることです。
mtcars$id <- seq_len(nrow(mtcars))
p + geom_text(aes(label = id), colour = NA)
次に、テキストグロブにポイントグロブからgrobsのツリーを走査し、データセットの行を表示しますラベルによってインデックスされる。
これは非常に一般的ではありません。ポイントgrob内にid
の値を格納する方法があれば、はるかにクリーンになります。
簡単な方法はありません。あなたの最終目標は何ですか?代わりがあるかもしれません。 – kohske
@kohske:コメントが長すぎるので、私は何をしているのかを説明するために質問を更新しました。 –
非常に興味深い。私はあなたの目的を理解しています。残念ながら、grobを通してデータにアクセスする方法はありません(おそらく次のリリースでさえ)。しかし、おそらく '' stat = "identity"のときにデータに関する情報を持つことは有益でしょう。あとで議論します。 – kohske