6
$\begingroup$

When a list of functions is passed to Plot in an unevaluated form (e.g. with Through), the result is a plot with single color.

Plot[Through[{Sin, Cos, Tan}[t]], {t, 0.01, 10.5}, PlotStyle -> {Red, Blue, Green}]

Mathematica graphics

However, the same list of functions, listed explicitly, gives color as expected.

Plot[{Sin[t], Cos[t], Tan[t]}, {t, 0.01, 10.5}, PlotStyle -> {Red, Blue, Green}]

Mathematica graphics

$\endgroup$
8
  • 1
    $\begingroup$ Plot has attribute HoldAll. So, it has "the right" to not work when you don't explicitly pass it a list. Try using Evaluate@Through..., or, better still, add the undocumented option Evaluated->True $\endgroup$
    – Rojo
    Jan 5, 2013 at 6:50
  • $\begingroup$ @Rojo Ups ... I saw your comment after posting $\endgroup$ Jan 5, 2013 at 6:53
  • $\begingroup$ @belisarius, it's ok, I wasn't going to post it, glad you did $\endgroup$
    – Rojo
    Jan 5, 2013 at 6:54
  • $\begingroup$ Related: mathematica.stackexchange.com/q/1731/5 $\endgroup$
    – rm -rf
    Jan 5, 2013 at 7:00
  • $\begingroup$ @Hypnotoad if it's a dupe I don't think it's of that one. The best answer here, assuming he's implicitly asking how and not why, is to use Evaluated, and that isn't relevant or even mentioned in the linked question $\endgroup$
    – Rojo
    Jan 5, 2013 at 7:03

1 Answer 1

4
$\begingroup$
a[x_, y_, z_] := z; b[x_, y_, z_] := z 2; c[x_, y_, z_] := z 3;
Plot[Through[{a, b, c}[10, 3, t]], {t, 0.01, 10.5}, 
 PlotStyle -> {Red, Blue, Green}, Evaluated -> True]

Mathematica graphics

$\endgroup$
1
  • 1
    $\begingroup$ Maybe one could add here that if you plan to do many such plots it's also convenient to put this at the beginning of the notebook: SetOptions[Plot,Evaluated->True]; Then you can leave out the Evaluated option in all the subsequent plots. $\endgroup$
    – Jens
    Jan 5, 2013 at 17:10

Not the answer you're looking for? Browse other questions tagged or ask your own question.