Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

I have this Mathematica code

Clear[colorbar]
colorbar[{min_, max_}, colorFunction_: Automatic, divs_: 150] := 
  DensityPlot[y, {x, 0, 0.1}, {y, min, max}, AspectRatio -> 10, 
  PlotRangePadding -> 0, PlotPoints -> {2, divs}, MaxRecursion -> 0, 
  Frame -> True, 
  FrameLabel -> {{None, Subscript["R", "min"]}, {None, None}}, 
  LabelStyle -> Directive[FontFamily -> "Helvetica", 17], 
  FrameTicks -> {{None, All}, {None, None}}, 
  FrameTicksStyle -> Directive[FontFamily -> "Helvetica", 15, Plain], 
  ColorFunction -> colorFunction]

Mn = 250; cn = 0.25;
Md = 7000; b = 6; a = 3; h = 0.2;
υ0 = 20; β = 1.5; ch = 8.5;
Lz = 10;
E0 = 600;

Vn = -Mn/Sqrt[R^2 + z^2 + cn^2];
Vd = -Md/Sqrt[b^2 + R^2 + (a + Sqrt[h^2 + z^2])^2];
Vh = υ0^2/2 Log[R^2 + β*z^2 + ch^2];
Vt = Vn + Vd + Vh;
Veff = Vt + Lz^2/(2*R^2);

f[R_, pR_] := 1/2*pR^2 + Veff /. {z -> 0};

plrange = {{0, 13.5}, {0, 47}};
valrange = {0, 6};

C0 = 
  ContourPlot[Evaluate[f[R, pR]], {R, 0.001, 15}, {pR, 0, 50}, 
    Contours -> {E0}, ContourStyle -> {{Black, Thickness[0.005]}}, 
    AspectRatio -> 1, ContourShading -> False, PlotPoints -> 200, 
    PerformanceGoal -> "Speed", PlotRange -> plrange];

With[{opts = {ImageSize -> {Automatic, 550}}, cf = "Rainbow"}, 
  Row[{Show[
    ListPlot[List /@ data[[All, {1, 2}]], 
      PlotStyle -> ({PointSize[0.01], ColorData[cf][1 - #]} & /@ 
        Rescale[data[[All, 3]], valrange]),
      PlotRange -> plrange, 
      AspectRatio -> 1, Frame -> True, RotateLabel -> False, 
      Axes -> None, FrameTicks -> True, 
      FrameLabel -> {"R", OverDot["R"]}, 
      LabelStyle -> Directive[FontFamily -> "Helvetica", 17], 
      ImagePadding -> {{60, 20}, {60, 20}}, opts],
    C0], 
    Show[colorbar[valrange, cf], 
     ImagePadding -> {{20, 60}, {60, 20}}, opts]}]]

I inverted the "Rainbow" color scheme using

{..., ColorData[cf][1 - #]}&

and produced the following nice plot.

enter image description here

However, I can't find a way to invert the colors in the color bar. To be more specific, according to my data red should correspond to 0 of Rmin and deep purple to 6. I hope it is easy to invert the order of the colors in the color bar. Can someone tell me how?

share|improve this question
1  
Try replacing colorbar[valrange, cf] with colorbar[valrange, ColorData[cf][1 - #] &] at the end of your example. –  VLC Mar 18 '13 at 11:42
    
@VLC Yes it worked! If you want, post a small answer so I can approve it. –  Vaggelis_Z Mar 18 '13 at 11:46
add comment

2 Answers

up vote 4 down vote accepted
Show[Replace[
  colorbar[valrange, cf], (VertexColors -> x_) :>  VertexColors -> Reverse@x, Infinity], 
 ImagePadding -> {{20, 60}, {60, 20}}]

Mathematica graphics

share|improve this answer
    
Terse form: Show[ colorbar[valrange, cf] /. (vc : VertexColors -> x_) :> vc -> Reverse@x, ImagePadding -> {{20, 60}, {60, 20}} ] –  Mr.Wizard Mar 18 '13 at 13:10
    
Or: Show[ colorbar[valrange, cf] /. vc : (VertexColors -> x_) :> Reverse[vc, {2}], ImagePadding -> {{20, 60}, {60, 20}} ] –  Mr.Wizard Mar 18 '13 at 13:13
add comment

The last solution is a bit too long for my taste. Here's something more compact:

colorbar[{0, 6}, ColorData[{"Rainbow", "Reverse"}]]

reversed color bar

This also works for most of the other named color schemes:

colorbar[{0, 6}, ColorData[{"TemperatureMap", "Reverse"}]]

reversed "temperature map"

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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