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