[BioC] Rgraphviz: interactive graphs, how to map coordinates to plotted graph?
Rainer Machne
raim at tbi.univie.ac.at
Tue Sep 1 08:43:43 CEST 2009
On Mon, 2009-08-31 at 14:54 +0200, Wolfgang Huber wrote:
> Dear Rainer
>
> Have a look at the 'renderGraph' function:
> showMethods("renderGraph", includeDefs=TRUE)
>
> and at
>
> r1 <- renderGraph(g1)
> graphRenderInfo(r1)
>
Ok, thanks! Still hacking around I have changed my function to first
plot an empty plot on the same window (par(new=T)) using
graphRenderInfo()$bbox coordinates as xlim and ylim values, before
calling identify() or plotting stuff using the node coordinates.
bbox <- graphRenderInfo(graph)$bbox
par(new=T, mai=c(0,0,0,0))
plot(xy,xlim=bbox[,1],ylim=bbox[,2], pch=19, col=showNodeXY*3)
This already comes much closer, but is not quite there yet.
I guess to do it correctly would require setting or using the user coordinates in "usr",
but I don't really know how "usr" works yet. I will have a closer loock at this and the
renderGraph methods once I have some spare time (unless someone jumps in heroically
to help me out ;)
Thanks,
Rainer
> Florian might be able to tell you more on how to map the output of that
> to the user coordinates of the R graphics device.
>
> Best wishes
> Wolfgang
>
>
> Btw, a "poor man's" interactive plot (in static html) can be made like
> this: http://www.ebi.ac.uk/~huber/tooltips/IMCA/imca.R
> resulting in http://www.ebi.ac.uk/~huber/tooltips/IMCA/imca.html
>
>
>
> -------------------------------------------------------
> Wolfgang Huber
> EMBL
> http://www.embl.de/research/units/genome_biology/huber
> -------------------------------------------------------
>
>
>
> Machne ha scritto:
> > Hi,
> >
> > I want to use interactive features of R ("identify()") on Rgraphviz
> > plots, and also plot other things over the plotted graph (using node
> > coordinates) after it has been rendered. However, the plotted
> > coordinates are shifted with respect to the coordinates returned by
> > nodeRenderInfo(graph)$nodeX/nodeY.
> >
> > Does anyone know an easy way to calculate this shift, avoid the shift,
> > or reset the plot area to coordinates used for rendering the graph?
> > Or: are there already packages providing interactivity for
> > Rgraphviz-rendered graphs?
> >
> > Below you find a small example script, including a hack of the function
> > identifyPch() provided by the help page "?identify" to work on
> > renderGraph(graph) plots, here for a graph object from the ?randomGraph
> > help page example.
> > This should illustrate well what i want to do and what the problem is.
> >
> > The green "x" should be on the nodes but are shifted. The
> > identifyNode(graph) function would allow to click on nodes (here the
> > "x"), plot something over them, and e.g. return a list of selected
> > nodes. I think this would open up the graph and Rgraphviz packages for a
> > lot of nice applications.
> >
> > Rainer
> >
> >
> > # graphCoordinates.R
> >
> > library('Rgraphviz')
> >
> > ## TODO : find out how we can set coordinates to allow
> > ## usage of identify() function in Rgraphviz graphs
> > identifyNode <- function(graph, pch=19, showNodeXY=TRUE, ...)
> > {
> >
> > xy <- cbind(nodeRenderInfo(graph)$nodeX,nodeRenderInfo(graph)$nodeY)
> >
> > # show where x/y coordinates would put nodes
> > if (showNodeXY)
> > points(xy, pch=4, col=3)
> >
> > n <- nrow(xy)
> >
> > x <- xy[,1]
> > y <- xy[,2]
> >
> > sel <- rep(FALSE, length(x)); res <- integer(0)
> > while(sum(sel) < n) {
> > ans <- identify(x[!sel], y[!sel], n=1, plot=FALSE, ...)
> > if(!length(ans)) break
> > ans <- which(!sel)[ans]
> > points(x[ans], y[ans], pch = pch, col=2)
> >
> > cat(paste("SELECTED NODE", rownames(xy)[ans], "\n"))
> >
> > sel[ans] <- TRUE
> > res <- c(res, ans)
> > }
> > res
> > }
> >
> > ## 1) generate random graph, from ?randomGraph help page:
> > set.seed(123)
> > V <- letters[1:10]
> > M <- 1:4
> > g1 <- randomGraph(V, M, 0.2)
> > numEdges(g1) # 16, in this case
> > edgeNames(g1)# "<from> ~ <to>" since undirected
> >
> > ## 2) layout and plot the graph
> > g1 <- layoutGraph(g1)
> > renderGraph(g1)
> >
> >
> > ## 3) Identify nodes:
> > ## After calling identifyNode(g1) please click on the graph
> > ## to identify nodes.
> > ## The green "x" are plotted at x/y coordinates in nodeRenderInfo
> > ## Note that they are shifted wrt to the rendered nodes.
> >
> > identifyNode(g1)
> >
> > # End of file
> >
> > _______________________________________________
> > Bioconductor mailing list
> > Bioconductor at stat.math.ethz.ch
> > https://stat.ethz.ch/mailman/listinfo/bioconductor
> > Search the archives: http://news.gmane.org/gmane.science.biology.informatics.conductor
>
More information about the Bioconductor
mailing list