MathGroup Archive 2008

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: HighlightedEdgeColors with Combinatoric`ShowGraph and AnimateGraph

  • To: mathgroup at smc.vnet.net
  • Subject: [mg88154] Re: HighlightedEdgeColors with Combinatoric`ShowGraph and AnimateGraph
  • From: Szabolcs Horvát <szhorvat at gmail.com>
  • Date: Sat, 26 Apr 2008 03:45:39 -0400 (EDT)
  • Organization: University of Bergen
  • References: <fus8db$82n$1@smc.vnet.net>

Dear Murray,

First I would like to say that I am not familiar with Combinatorica and 
its graph plotting functions, so what I write here might not be entirely 
correct.

Murray Eisenberg wrote:
> The following works as expected to highlight two of the edges of a graph 
> with a different color each:
> 
>    <<Combinatorica`
>    g=Cycle[3];
> 
>    ShowGraph[
>      Highlight[g,{{{1,2}},{{2,3}}},HighlightedEdgeColors->{Red,Blue}]]
> 
> And the docs say that AnimateGraph takes the same options as Highlight. 
> But the following does NOT work -- it uses just the first color, Red, 
> when animating the highlighting of the two edges:
> 
>    AnimateGraph[g, {{1, 2}, {2, 3}},
>      HighlightedEdgeColors -> {Red, Blue}]
> 
> What's wrong?
> 



> (I do know that I used different syntax in the 2nd argument of 
> Highlight, on the one hand, and in the 2nd argument of AnimateGraph, on 
> the other hand.  For Highlight to work within ShowGraph so as to animate 
> edges, it is necessary to put the extra level of nesting in each edge 
> specification.  But such extra nesting in the case of AnimateGraph would 
> not work: it gives no animation of edges.)
>

I think that what you wrote is correct: the documentation for 
AnimateGraph says:  "Here l is a list containing vertices and edges of 
g."  So no extra nesting should be necessary.

In contrast to this, the doc page for Highlight says:  "The second 
argument p has the form {Subscript[s, 1],Subscript[s, 2],\[Ellipsis]}, 
where the Subscript[s, i] are disjoint subsets of vertices and edges of 
g."  So the second argument of highlight should be a list of lists, 
where the elements of each sublist will have a common style.

This is the source code of AnimateGraph:

AnimateGraph[g_Graph, l_List, flag_Symbol: All, opts___?OptionQ] :=
  ListAnimate[
   Map[ShowGraph,
    If[flag === One,
     Table[
      Highlight[g, {{l[[i]]}},
       Sequence @@
        FilterRules[{opts}, Except[Options[ListAnimate]]]], {i,
       Length[l]}],
     Table[Highlight[g, { l[[Range[i]]] },
       Sequence @@
        FilterRules[{opts}, Except[Options[ListAnimate]]]], {i,
       Length[l]}]
     ]
    ], Sequence @@ FilterRules[{opts}, Options[ListAnimate]]
   ]


If you look at the second Table function, especially the
{ l[[ Range[i] ]]  } part, you'll see that AnimateGraph will only use a 
single sublist in Highlight, so all edges/vertices will be highlighted 
with the same style.  As I said, I am not familiar with Combinatorica, 
so I cannot tell whether AnimateGraph was written like this 
intentionally, or this is a bug, but the behaviour you are looking for 
can be achieved by changing

{ l[[ Range[i] ]]  }

to

List /@ l[[ Range[i] ]]

Note that this change will only affect the case when the flag has the 
value All.  The AnimateGraph[g, l, One] case cannot be made to work with 
HighlightedEdgeColors without parsing the colour list inside 
AnimateGraph (instead of passing it to Highlight unchanged).  Probably 
this is the reason why the All case uses only a single style too.

I hope this helps,
Szabolcs

P.S.  Actually Highlight seems to accept empty sublists too, so for the 
One case,

{{l[[i]]}}

could be replaced by

ReplacePart[Table[{}, {Length[l]}], i -> {l[[i]]}]

to get the right colour.


  • Prev by Date: Re: Wolfram User Interface Research?
  • Next by Date: Re: OpenerView (with cells?)
  • Previous by thread: HighlightedEdgeColors with Combinatoric`ShowGraph and AnimateGraph
  • Next by thread: ReplacePart and Compile