[BioC] Rgraphviz: interactive graphs, how to map coordinates to plotted graph?

Wolfgang Huber whuber at embl.de
Mon Aug 31 14:54:33 CEST 2009


Dear Rainer

Have a look at the 'renderGraph' function:
showMethods("renderGraph", includeDefs=TRUE)

and at

r1 <- renderGraph(g1)
graphRenderInfo(r1)

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