[BioC] Rgraphviz edge weight question

Kimpel, Mark William mkimpel at iupui.edu
Mon Jun 12 04:42:19 CEST 2006

Well, I got it figured out after all. The patch to "agopen", which
allows the slots "lwd" and "lty" to be passed from a graph to an Ragraph
object, is below. Turned out to be pretty simple once I understood what
I was doing!


agopen<-function (graph, name, nodes, edges, kind = NULL, layout = TRUE,

    layoutType = c("dot", "neato", "twopi", "circo", "fdp"), 
    attrs = list(), nodeAttrs = list(), edgeAttrs = list(), subGList =
    edgeMode = edgemode(graph), recipEdges = c("combined", "distinct")) 
    layoutType <- match.arg(layoutType)
    recipEdges <- match.arg(recipEdges)
    attrs <- getDefaultAttrs(attrs, layoutType)
    if ((missing(graph)) && (missing(edgeMode))) 
        stop("Must pass in either 'graph' or 'edgeMode'")
    if (((graphvizVersion() == "2.4") || (graphvizVersion() == 
        "2.6")) && (layoutType == "neato")) {
        singletonGraph <- any(sapply(connComp(graph), function(x)
length(x) <= 
        if (singletonGraph == TRUE) 
            stop("There is a bad interaction between ", "Rgraphviz and
Graphviz 2.4 involving ", 
                "graphs with singleton nodes laid out with neato.\n", 
                "Hopefully we can find a workaround for ", "this
situation, but until then you can ", 
                "use Graphviz versions earlier or later than 2.4.")
    if (missing(nodes)) {
        if (missing(graph)) 
            stop("Must supply either parameter 'graph' or 'nodes'")
        nodes <- buildNodeList(graph, nodeAttrs, subGList, attrs$node)
    if (missing(edges)) {
        if (missing(graph)) 
            stop("Must supply either parameter 'graph' or 'edges'")
        edges <- buildEdgeList(graph, recipEdges, edgeAttrs, 
            subGList, attrs$edge)
    if (is.null(kind)) {
        outK <- switch(edgeMode, undirected = 0, directed = 1, 
    else {
        outK <- switch(kind, AGRAPH = 0, AGDIGRAPH = 1, AGRAPHSTRICT =
            AGDIGRAPHSTRICT = 3, stop(paste("Incorrect kind parameter:",

    g <- .Call("Rgraphviz_agopen", as.character(name), as.integer(outK),

        as.list(nodes), as.list(edges), as.list(attrs),
        PACKAGE = "Rgraphviz")
    g at layoutType <- layoutType
    g at edgemode <- edgeMode
    #Below is a patch that allows lwd (line width) and lty (line type)
to be set in same manner color is set
    if (layout) {g<-layoutGraph(g)}
    if (!is.null(edgeAttrs$lwd))
        for (i in 1:length(edgeAttrs$lwd))
            attr(attr(g,"AgEdge")[[i]], "lwd")<-edgeAttrs$lwd[i]
    if (!is.null(edgeAttrs$lty))
        for (i in 1:length(edgeAttrs$lty))
            attr(attr(g,"AgEdge")[[i]], "lty")<-edgeAttrs$lty[i]

Mark W. Kimpel MD 


(317) 490-5129 Home, Work, & Mobile

1-(317)-536-2730 FAX

-----Original Message-----
From: Wolfgang Huber [mailto:huber at ebi.ac.uk] 
Sent: Sunday, June 11, 2006 1:22 PM
To: Kimpel, Mark William
Cc: Bioconductor Newsgroup
Subject: Re: [BioC] Rgraphviz edge weight question

Hi Mark,

I believe that is not currently possible (Rgraphviz 1.11.0) without 
changing some of the code in Rgraphviz (or overwriting exisitings 
methods with your own ones). Seth, Jeff, please correct me if I am

The method "lines" for "AgEdge" objects (defined in 
Rgraphviz/R/Ragraph.R) has and honours a parameter "lwd". Its  default 
is the global option par("lwd").

However, that parameter is not set (or read from any kind of graph 
attribute or function call parameter) by the plot method for the 
"graphNEL" class (which in turn calls the plot method for the class 
"Ragraph"). Both of these are defined in Rgraphviz/R/graph.R.

It should be relatively straightforward to modify these latter two 
methods to honor an element "lwd" in the edgeAttrs list and pass it on 
to "lines" (for "AgEdge").

Mark, if you feel adventurous, you could try to contribute a patch for 
doing this?

Also, in the Bioconductor book on p.368 and Fig. 21.15 there is an 
example how can really do anything you want...

Best wishes

PS  - for the purists, when I said method for class X, I meant a method 
whose signature contains X in the first position.

Kimpel, Mark William wrote:
> I am visualizing graphNEL objects using Rgraphviz. I would like to set
the thickness of the edge lines, in points, proportional to the edge
weights. Is this an attribute that can be set? I have looked through the
Rgraphviz documentation as well as the Graphviz website without finding
an answer.
> Thanks,
> Mark
> Mark W. Kimpel MD 
> Official Business Address:
> Department of Psychiatry
> Indiana University School of Medicine
> Biotechnology, Research, & Training Center
> 1345 W. 16th Street
> Indianapolis, IN  46202
> Preferred Mailing Address:
> 15032 Hunter Court
> Westfield, IN  46074
> (317) 490-5129 Home, Work, & Mobile
> 1-(317)-536-2730 FAX
> _______________________________________________
> Bioconductor mailing list
> Bioconductor at stat.math.ethz.ch
> https://stat.ethz.ch/mailman/listinfo/bioconductor
> Search the archives:

Wolfgang Huber  EBI/EMBL  Cambridge UK  http://www.ebi.ac.uk/huber

More information about the Bioconductor mailing list