Re: GraphPlot
- To: mathgroup at smc.vnet.net
- Subject: [mg114576] Re: GraphPlot
- From: Daniel Lichtblau <danl at wolfram.com>
- Date: Wed, 8 Dec 2010 06:41:42 -0500 (EST)
Lou wrote:
> Hi All,
> I hope you can help.
> I'm playing around with the GraphPlot function and would like to
> separate the graphs into different plots (in e.g. a table].
> So when there are 5 graphs plotted in one picture I would like 5
> pictures.
> The trick would be (I thought..) to get the graph data and use gather
> to form the graphs with the vertexes connected but it seems the
> GraphPlot function outsmarts the Gather function. So e.g. Gather will
> disconnect some grahps.
> I used Gather with a test function like OR'ing all the vertexes but it
> seems Gather does not try out all possibilities.
> Any of you other thoughts to solve this question?
> so:
> links = {"a" -> "b", "c" -> "b", "d" -> "b", "b" -> "e", "a1" -> "e",
> "c1" -> "e", "d1" -> "e", "q" -> "z", "r" -> "z", "s" -> "z"}
> with GraphPlot[links] will generate 2 graphs.
>
> Gather will make 3 graphs:
> Gather[links, ((#1[[1]] == #2[[1]]) || (#1[[2]] == #2[[2]]) || (#1[[
> 1]] == #2[[2]]) || (#1[[2]] == #2[[1]])) &]
> outputs to
> {{"a" -> "b", "c" -> "b", "d" -> "b", "b" -> "e"}, {"a1" -> "e",
> "c1" -> "e", "d1" -> "e"}, {"q" -> "z", "r" -> "z", "s" -> "z"}}
> which results in 3 graphs..
Gather as used above will not give a transitive closure.
You can get a start on this by finding the connected components of the
undirected version of your graph.
In[14]:= vertsets = ConnectedComponents[UndirectedGraph[Graph[links]]]
Out[14]= {{"a", "b", "c", "d", "e", "a1", "c1", "d1"}, {"q", "z", "r",
"s"}}
In[15]:= subgraphs = GatherBy[links,
osition[vertsets, #[[1]]][[1, 1]] &]
Out[15]= {{"a" -> "b", "c" -> "b", "d" -> "b", "b" -> "e",
"a1" -> "e", "c1" -> "e", "d1" -> "e"}, {"q" -> "z", "r" -> "z",
"s" -> "z"}}
Now you might do
Map[GraphPlot, subgraphs]
to get separated graphs.
Daniel Lichtblau
Wolfram Research