Entering edit mode
Rand, Hugh
▴
50
@rand-hugh-2609
Last seen 10.4 years ago
Hi all,
Following up on Robert's idea, I have built a simple example of how to
display several graphs that use the same node locations. The example
is very bare-bones, and contains one bug (see below), but will suffice
for simple cases. It is based on the release version of graph and
Rgraphviz. The devel version (I am told) greatly improves the handling
of attributes. I will send out a new version of this code once I have
a bit more time to work with the current devel version of the
libraries and make the code a bit less bare-boned (but that may take
me a litte while).
Hugh
#Bug: The template graph that is used to display all the graphs is the
union
# of all the given graphs. As such, if you are working with directed
# graphs, the template will not correctly display edge orientation.
#
#sessionInfo:
# R version 2.6.1 (2007-11-26)
# i386-pc-mingw32
#
# locale:
# English_United States.1252
#
# attached base packages:
# [1] stats graphics grDevices utils datasets methods
base
#
# other attached packages:
# [1] Rgraphviz_1.16.0 graph_1.15.6
#
# loaded via a namespace (and not attached):
# [1] cluster_1.11.9 tools_2.6.1
#
#
#Define Functions
#
#plot a graph whose edges are all in a second graph (template)
plotGraphWithTemplate = function(g1,template,...){
e1 = edgeNames(g1);
e2 = edgeNames(template);
indexMatchingEdges = is.element(e2,e1);
for(i in which(!indexMatchingEdges)){
template at AgEdge[[i]]@color="transparent";
}
for(i in which(indexMatchingEdges)){
template at AgEdge[[i]]@color="blue";
}
plot(template,...);
}
#create a graph from the union of all graphs in a list
unionGraphList = function(aGraphList){
a = union(aGraphList[[1]],aGraphList[[2]]);
for(i in 3:length(aGraphList)){ a = union(a,aGraphList[[i]]); }
return(a);
}
#example to display a list of graphs with the vertices in the same
location
exampleDemo = function(){
#build graphs and template for plotting
set.seed(123);
n = 6; #number of graphs
v = letters[1:8]; #vertex names
m = c(1:3); #food for randomGraph
p = .4; #more food for randomGraph
aGraphList = replicate(n,randomGraph(V=v,M=m,p=p)); #a list of
graphs
aAll = unionGraphList(aGraphList); #all the
edges
template = agopen(aAll,name="union"); #a
'template'
#show plots with and without a template
par(mfcol=c(3,4));
lapply(aGraphList,plot);
lapply(aGraphList,plotGraphWithTemplate,template=template);
}
#
#Run the Example
#
require(graph);
require(Rgraphviz);
exampleDemo();
-----Original Message-----
From: Robert Gentleman [mailto:rgentlem@fhcrc.org]
Sent: Wednesday, January 30, 2008 1:45 PM
To: Rand, Hugh
Subject: Re: [BioC] How to use the same node layout for a set of graph
plots using graph and Rgraphviz?
life will be much easier in devel than release, we greatly improved
the
handling of attributes and colors etc
Rand, Hugh wrote:
> Hi Robert,
>
> Thanks for the work-around. I will post an example when I get a
nice example sorted out. Sorry about not running sessionInfo to
provide version info.
>
> Hugh
>
> -----Original Message-----
> From: Robert Gentleman [mailto:rgentlem at fhcrc.org]
> Sent: Tuesday, January 29, 2008 9:22 AM
> To: Rand, Hugh
> Cc: bioconductor at stat.math.ethz.ch
> Subject: Re: [BioC] How to use the same node layout for a set of
graph plots using graph and Rgraphviz?
>
> Hi Hugh,
> Sorry to say not easily. And sorry for the long delay in
responding,
> I was trying a few things out, but solving this problem seems to
require
> a bit of redesign.
>
> The only thing that might work, in a fairly straightforward
fashion
> is, something like this:
>
> set.seed(123);
> V = letters[1:7];
> M = c(1:3);
> g1 = randomGraph(V,M,.5);
> g2 = randomGraph(V,M,.5);
> g3 = union(g1, g2)
>
> then layout g3, make a copy of it, set the edge color for g1
edges in
> one copy to the background and for g2 in the other copy.
>
> You did not say which version of Rgraphviz you are using, but
there
> have been a lot of changes to the devel version to make setting node
and
> edge attributes for rendering simpler.
>
> best wishes
> Robert
>
>
>
> Rand, Hugh wrote:
>> Hi,
>>
>> I am using the packages "graph" and "Rgraphviz". I am using them to
display a
>> set of graphs which all have the same nodes, but different edges.
To aid in the
>> visual comparison, it would be useful to use the same node layout
for all of
>> the graphs. It would be fine to use the node layout from the first
graph. It is
>> unclear (to me) how to do this using the layout engine used in
Rgraphviz.
>>
>> A concrete example:
>>
>> library("graph");
>> library("Rgraphviz");
>> set.seed(123);
>> V = letters[1:7];
>> M = c(1:3);
>> g1 = randomGraph(V,M,.5);
>> g2 = randomGraph(V,M,.5);
>> par(mfrow=c(1,2));
>> plot(g1);
>> plot(g2);
>> # The question: How do I now display both g1 and g2 (as seperate
plots),
>> # but with the nodes in the same place? I would be content with
the node
>> # locations taken from the layout for g1.
>>
>> Thanks,
>>
>> Hugh Rand
>> rand at amgen.com
>>
>> [[alternative HTML version deleted]]
>>
>> _______________________________________________
>> 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
>>
>
> --
> Robert Gentleman, PhD
> Program in Computational Biology
> Division of Public Health Sciences
> Fred Hutchinson Cancer Research Center
> 1100 Fairview Ave. N, M2-B876
> PO Box 19024
> Seattle, Washington 98109-1024
> 206-667-7700
> rgentlem at fhcrc.org
>
> _______________________________________________
> 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
>
--
Robert Gentleman, PhD
Program in Computational Biology
Division of Public Health Sciences
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N, M2-B876
PO Box 19024
Seattle, Washington 98109-1024
206-667-7700
rgentlem at fhcrc.org