[R-gui] ggraphics and retrieving mouse coordinate as npc coordinates
Mark Heckmann <mark.heckmann <at> gmx.de> writes:
Hi all,
i tried to retrieve the mouse coordinates from a ggraphics widget
using a handler. With base graphics system it works fine, but using
grid, the returned values do not make sense to me. How can I transform
the returned values to e.g. npc coordinates?
library(RGtk2)
library(gWidgets)
w = gwindow("ggraphics example")
g = ggraphics(cont=w, expand=T)
size(g) <- c(900,900)
Sys.sleep(1)
print(grid.rect())
addHandlerClicked(g, handler = function(h,...) {
x <- h$x; y <- h$y
print(c("pressed at:", c(x,y)))
})
There are two ways. The first is to mimic the handler call in gWidgetsRGtk2
skipping the call to pltToUsr:
f <- function(h,...) {
theArgs <- list(...)
w <- theArgs[[1]]
e <- theArgs[[2]]
allocation <- w$GetAllocation()
xclick <- e$GetX()
yclick <- e$GetY()
x <- xclick/allocation$width
y <- 1 - (allocation$height - yclick)/allocation$height
print(c(x,y))
}
addHandler(g, signal="button-press-event", handler =f)
(Changing print(c(x,y)) as needed.)
The other is to invert this function which is what converts the (x,1-y) value
above into the output of the handler:
pltToUsr <- function(x,y) {
plt <- par("plt"); usr = par("usr")
c( (usr[2]-usr[1])/(plt[2]-plt[1])*(x - plt[1]) + usr[1],
(usr[4] - usr[3])/(plt[4] - plt[3])*(y - plt[3]) + usr[3]
)
}
Hope that helps!
Thanks and merry X-mas Mark ??????????????????????????????????????? Mark Heckmann Dipl. Wirt.-Ing. cand. Psych. Vorstra?e 93 B01 28359 Bremen Blog: www.markheckmann.de R-Blog: http://ryouready.wordpress.com