14

Sin[x]

Show[Plot[Sin[x], {x, 0, π}, PlotStyle -> Red, 
          PlotRange -> {{0, 2 π}, {-1, 1}}], 
     Plot[Sin[x], {x, π, 2 π}, PlotStyle -> Green, 
          PlotRange -> {{0, 2 π}, {-1, 1}}]]

Is there a simpler way of doing this? Especially, one that does not require repeating the Plot command 2 times ;)

kglr
  • 394,356
  • 18
  • 477
  • 896
Andrei
  • 901
  • 5
  • 17

2 Answers2

23
 Plot[Sin[x], {x, 0, 2 π}, PlotStyle -> Thick,
 ColorFunction -> Function[{x, y}, If[x < Pi, Red, Blue]],
 ColorFunctionScaling -> False,
 PlotRange -> {{0, 2 π}, {-1, 1}}]

or

 Plot[Sin[x], {x, 0, 2 π}, PlotStyle -> Thick,
 Mesh -> {{Pi}},
 MeshShading -> {Red, Blue},
 PlotRange -> {{0, 2 π}, {-1, 1}}]

or

 Plot[{ConditionalExpression[Sin[x], 0 <= x <= Pi],
 ConditionalExpression[Sin[x], Pi <= x <= 2 Pi]}, {x, 0, 2 Pi},
 PlotStyle -> {Directive[Thick, Red], Directive[Thick, Blue]}]

enter image description here

LCarvalho
  • 9,233
  • 4
  • 40
  • 96
kglr
  • 394,356
  • 18
  • 477
  • 896
  • Thank you! And if I want to make the blue region dashed? I tried MeshShading -> {Red, {Blue, Dashed}} without any luck.. – Andrei Feb 04 '13 at 13:14
  • 1
    you need to use Directive: MeshShading->{Red,Directive[Blue,Dashed]} – kglr Feb 04 '13 at 13:24
1

Not a simpler way:

plt = Plot[Sin[x], {x, 0, 2 \[Pi]}];
{d, opt} = {Cases[plt, Line[x_] -> x, Infinity][[1]], plt[[2]]};
{r, b} = GatherBy[d, #[[1]] <= Pi &];
Graphics[{Thick, {Red, Line@r}, {Blue, Line@b}}, opt]
(*ListLinePlot[{r,b},PlotStyle->{{#,Red},{#,Blue}}&@Thick]*)

enter image description here

chyanog
  • 15,542
  • 3
  • 40
  • 78