MathGroup Archive 2006

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

Search the Archive

Re: Graphics--How to plot all functions issued from For loop and

  • To: mathgroup at smc.vnet.net
  • Subject: [mg71826] Re: Graphics--How to plot all functions issued from For loop and
  • From: Peter Pein <petsie at dordos.net>
  • Date: Thu, 30 Nov 2006 06:05:34 -0500 (EST)
  • References: <ekjg15$df7$1@smc.vnet.net>

abdou.oumaima at hotmail.com schrieb:
> Hello MathGroup,
> I'd like to plot all functions issued from For Loop then color them automatically. If my loop is =10 it'll be very hard to write all Hue commands and all legends. Is there any way to plot and color and legend all functions automatically. I don't want to do that manually.
> Please Help.
> Many thanks in advance.
> Cheers.
> Lian.
> 
> NB: Please copy and past the code bellow into a notebook file to see what I did manually then evaluate it.
> 
> \!\(\*
>   RowBox[{\(<< Graphics`;\), 
>     "\[IndentingNewLine]", \(<< "\<Graphics`Legend`\>";\), 
>     "\[IndentingNewLine]", "\[IndentingNewLine]", \(listps = {};\), 
>     "\[IndentingNewLine]", 
>     RowBox[{
>       RowBox[{"For", "[", 
>         RowBox[{\(k = 0\), ",", \(k \[LessEqual] 5\), ",", 
>           RowBox[{"{", "\[IndentingNewLine]", 
>             RowBox[{
>               RowBox[{"ps", "=", 
>                 RowBox[{
>                   StyleBox["PolarPlot",
>                     FontColor->RGBColor[1, 0, 0]], 
>                   "[", \(Sin[k\ x], {x, \(-Pi\)/2, Pi/2}, 
>                   PlotStyle \[Rule] Hue[\(k - 1\)\/7], 
>                   AxesLabel \[Rule] {\[Theta], \[Psi]}, \ 
>                   DisplayFunction \[Rule] Identity\), "]"}]}], ";", 
>               "\[IndentingNewLine]", 
>               "\[IndentingNewLine]", \(listps = Join[listps, List[ps]]\), 
>               ";"}], "\[IndentingNewLine]", "\[IndentingNewLine]", "}"}], 
>           ",", \(k++\)}], "\[IndentingNewLine]", "]"}], ";"}], 
>     "\[IndentingNewLine]", 
>     RowBox[{
>       RowBox[{"pc", "=", 
>         RowBox[{
>           StyleBox["PolarPlot",
>             FontColor->RGBColor[1, 0, 0]], "[", \(Cos[x], {x, Pi/2, 3\ Pi/2}, 
>           PlotStyle \[Rule] Hue[\ 0.8], \ 
>           AxesLabel \[Rule] {\[Theta], \[Psi]}, \ 
>           DisplayFunction \[Rule] Identity\), "]"}]}], ";"}], 
>     "\[IndentingNewLine]", 
>     "\[IndentingNewLine]", \(ShowLegend[
>         DisplayTogether[listps, pc, Ticks \[Rule] {PiScale, Automatic}, 
>           PlotRange \[Rule] {{\(-Pi\)/2, Pi/2}, Automatic}, 
>           ImageSize \[Rule] 700, 
>           DisplayFunction \[Rule] 
>             Identity], {{{Hue[0], "\<1\>"}, {Hue[1\/7], "\<Sin(x)\>"}, {Hue[
>                 2\/7], "\<Sin(2x)\>"}, {Hue[3\/7], "\<Sin(3 x)\>"}, {Hue[
>                 4\/7], "\<Sin(4 x)\>"}, {Hue[5\/7], "\<Sin(5 x)\>"}, {Hue[
>                 0.8], "\<Cos (x)\>"}}, LegendPosition \[Rule] { .8,  .1}, 
>           LegendSize \[Rule] { .3,  .2}, \ 
>           LegendShadow \[Rule] { .02, \(- .02\)}}];\)}]\)
> 
> Link to the forum page for this post:
> http://www.mathematica-users.org/webMathematica/wiki/wiki.jsp?pageName=Special:Forum_ViewTopic&pid=15758#p15758
> Posted through http://www.mathematica-users.org [[postId=15758]]
> 
> 

Hello,

I had a hard time to understand, why the whole work of the For-loop is done in
the "increment" part, while the body of your loop consists only of k++...

I'll send you two versions; the first one reproduces your graphic and the
second one comes with a correct legend (it seems you've been confused by the
unusal use of For[start,test,incr,body] too ;-) ).

The trick is, to automate the lists of hues and function-names as far as
possible and to assemble them in the "oneliner", which does the work.

1.)

huelist = Hue /@ Flatten[{Range[0, 5]/7, 0.8}];
namelist = Flatten[{"1", Table[StringJoin["Sin(", StringReplace[ToString[k],
  "1" -> " "], "x)"], {k, 5}], "Cos( x)"}];
ShowLegend[
  DisplayTogether[
    Inner[PolarPlot[#1, {x, -Pi/2, Pi/2}, PlotStyle -> #2] & ,
      Flatten[{Sin[Range[6]*x], Cos[x]}], huelist, List],
    AxesLabel -> {\[Theta], \[Psi]}, Ticks -> {PiScale, Automatic},
    PlotRange -> {Pi*{-1, 1}/2, Automatic}, ImageSize -> 700,
    DisplayFunction -> (#&)],
  {Transpose[{huelist, namelist}], LegendPosition -> {0.8, 0.1},
  LegendSize -> {0.3, 0.2}, LegendShadow -> {0.02, -0.02}}];

2.)

huelist = Hue /@ (Range[0, 6]/7); (* 6/7 ~ 0.86 instead of .8 *)
namelist = Flatten[{Table[StringJoin["Sin(", StringReplace[ToString[k],
  "1" -> " "], "x)"], {k, 6}], "Cos( x)"}];
ShowLegend[
  DisplayTogether[
    Inner[PolarPlot[#1, {x, -Pi/2, Pi/2}, PlotStyle -> #2] & ,
      Flatten[{Sin[Range[6]*x], Cos[x]}], huelist, List],
    AxesLabel -> {\[Theta], \[Psi]}, Ticks -> {PiScale, Automatic},
    PlotRange -> {Pi*{-1, 1}/2, Automatic}, ImageSize -> 700,
    DisplayFunction -> (#&)],
  {Transpose[{huelist, namelist}], LegendPosition -> {0.8, 0.1},
  LegendSize -> {0.3, 0.2}, LegendShadow -> 0.02*{1, -1}}];


HTH,
Peter


  • Prev by Date: Re: Graphics--How to plot all functions issued from For loop and
  • Next by Date: Re: Re: Re: Arithmetic Puzzle (so simple it's hard)
  • Previous by thread: Re: Graphics--How to plot all functions issued from For loop and
  • Next by thread: Re: Graphics--How to plot all functions issued from For