Re: GraphPlot
- To: mathgroup at smc.vnet.net
- Subject: [mg70809] Re: [mg70775] GraphPlot
- From: Carl Woll <carlw at wolfram.com>
- Date: Sat, 28 Oct 2006 05:21:50 -0400 (EDT)
- References: <200610270428.AAA24447@smc.vnet.net> <4541F805.6080501@wolfram.com> <14730F32-A184-44ED-AD4F-B8710B602DD9@aggregateknowledge.com>
Matt Curcio wrote:
> Carl,
> Thanks for your reply. Sorry I was unclear, let me try to
> explain better with a simpler example. When you run the code:
>
> << DiscreteMath`GraphPlot`;
> GraphPlot[{1 -> 2, 2 -> 3, 3 -> 1, 3 -> 4, 5 -> 6, 6 -> 5},
> VertexStyleFunction -> (Text[#, #] &)
>
>
> You see two graphs with the vertices labeled. The rightmost graph is
> composed of the components {5->6, 6->5}. But the only way I know
> that is because I've labeled the vertices and my dataset above is so
> small. What I would like is a function that does the following:
>
> MagicalGraphCoordinatesFunction[ {1 -> 2, 2 -> 3, 3 -> 1, 3 -> 4, 5 -
> > 6, 6 -> 5} ];
>
> which returns:
> {{1 -> 2, 2 -> 3, 3 -> 1, 3 -> 4}, {5 -> 6, 6 -> 5}}
>
> i.e. A list with the elements of the two directed graphs in my data.
> I am essentially using GraphPlot to discover how many directed graph
> clusters are in my data. Its great to visualize them, but I would
> really like to know which elements make up the subgraphs.
>
> Thanks again,
> Matt
Did you try the code I gave in my last post? Trying it out on this
example, we have:
gr={1 -> 2, 2 -> 3, 3 -> 1, 3 -> 4, 5 -> 6, 6 -> 5}
In[9]:=
StrongComponents[Join[gr, Reverse /@ gr]]
Out[9]=
{{1, 2, 3, 4}, {5, 6}}
This isn't quite what you asked for, but it's close.
Carl Woll
Wolfram Research
>
>
>
> On Oct 27, 2006, at 5:13 AM, Carl Woll wrote:
>
>> Matt Curcio wrote:
>>
>>> Hi,
>>> I have a question about extracting data from the internals of
>>> GraphPlot. For example, the following code plots multiple
>>> subplots of disconnected clusters.
>>>
>>> << DiscreteMath`GraphPlot`
>>> n = 129;
>>> d = Table[i -> Mod[i^2, n], {i, 0, n - 1}];
>>> GraphPlot[d];
>>>
>>> However, I would like to know the subsets that are being plotted.
>>> I know you can plot the vertex labels on the chart, but my dataset
>>> is ~50,000 connected vertices and GraphPlot outputs ~100 clusters,
>>> so vertex labeling is unrealistic. It would be very interesting
>>> to know which vertices GraphPlot has associated. There maybe a
>>> way to do this using some functions from "Combninatorica" but I
>>> have not been able to find them. Can anyone help?
>>>
>>> Thanks,
>>> Matt
>>>
>> I'm not clear on what you want, but have you tried StrongComponents
>> from the GraphPlot package? This function will give you a list of
>> the vertices in each disconnected cluster (assuming the graph is
>> undirected). In your example, we would convert d to an undirected
>> graph and then use StrongComponents:
>>
>> comps = StrongComponents[ Join[d, Reverse/@d] ];
>>
>> In[30]:=
>> Length[comps]
>> Out[30]=
>> 14
>>
>> Carl Woll
>
- References:
- GraphPlot
- From: Matt Curcio <matt@aggregateknowledge.com>
- GraphPlot