# Scale coloring of ContourPlot

The answer given here solved how to use the same color scale across multiple plots within the function ListContourPlot. I can't for the life of me map this solution onto the function ContourPlot that I am using.

Say for example I have the code

r = Norm[{x, y}];
plot1 = Plot3D[{r^2, -r^2}, {x, -Pi, Pi}, {y, -Pi, Pi},
ColorFunction -> "ThermometerColors", BoxRatios -> {2, 2, 3}];
plot2 = ContourPlot[r^2, {x, -Pi, Pi}, {y, -Pi, Pi},
ColorFunction -> "ThermometerColors"];
GraphicsRow[{plot1, plot2}]


which gives me the plots. If you look at the code you will see that in the contour plot I am only plotting the positive solutions and so for consistency my plot should be contours that are shades of red.

How can I achieve this? *****EDIT 1*****

kguler submitted an answer that solved this example question, but for a reason I can't understand it doesn't work in the actual system that I'm using. Here is my full code:

    Clear["Global*"];
DynamicEvaluationTimeout -> Infinity;

(*Nearest neighbour vectors*)
{e1, e2,
e3} = # & /@ {{0, -1}, {Sqrt/2, 1/2}, {-Sqrt/2, 1/2}};

(*dispersion*)
w[theta_, phi_] := Module[{c1, c2, c3, fq},
{c1, c2, c3} =
1 - 3 Sin[theta]^2 Cos[phi - 2 Pi (# - 1)/3]^2 & /@ {1, 2, 3};
fq = Total[#[] Exp[I q.#[]] & /@ {{c1, e1}, {c2, e2}, {c3,
e3}}];
Sqrt[1 + 2 # Omega Norm[fq]] & /@ {1, -1}
]

Omega = 0.01;
q = {qx, qy};

(***Figure3a***)
{theta, phi} = {Pi/2, Pi/2};
dirac3a = {(2/Sqrt) ArcCos[2/5], 4 Pi/3};
zoom = 0.005 Pi;

With[
{plotopts = {Mesh -> None, PlotStyle -> Opacity[0.7],
Ticks -> {{1.33, 1.34, 1.35}, {4.18, 4.19, 4.20}, Automatic},
BoxRatios -> {2, 2, 2}, PlotPoints -> 50, MaxRecursion -> 2,
AxesEdge -> {{-1, -1}, {1, -1}, {-1, -1}},
ColorFunction -> "ThermometerColors", LabelStyle -> Large,
ClippingStyle -> None, BoxStyle -> Opacity[0.5],
ViewPoint -> {1.43, -2.84, 1.13}, ViewVertical -> {0., 0., 1.}}},
figure3a = Plot3D[w[theta, phi],
{qx, dirac3a[] - zoom, dirac3a[] + zoom}, {qy,
dirac3a[] - zoom, dirac3a[] + zoom}, plotopts]
]

(***Figure3b***)
With[{plotopts = {Frame -> True,
FrameTicks -> {{{4.18, 4.19, 4.20}, None}, {{1.33, 1.34, 1.35},
None}}, ColorFunction -> "ThermometerColors",
LabelStyle -> Large, PlotRangePadding -> None,
ColorFunctionScaling -> False,
ColorFunction -> ColorData[{"ThermometerColors", {0.9996, 1.0004}}]
}
},
figure3b = ContourPlot[w[theta, phi][],
{qx, dirac3a[] - zoom, dirac3a[] + zoom}, {qy,
dirac3a[] - zoom, dirac3a[] + zoom}, plotopts]
]

(***Figure3b legend***)

legend = {0.9996 + 0.0001 #, 0.9996 + 0.0001 #} & /@ {0, 1, 2, 3, 4,
5, 6, 7, 8};
figure3bLegend =
ArrayPlot[legend, ColorFunction -> "ThermometerColors",
DataRange -> {{0, 1}, {0.9996, 1.0004}},
FrameTicks -> {{0.9996, 0.9997, 0.9998, 0.9999, {1.0000, "1.0000"},
1.0001, 1.0002, 1.0003, 1.0004}, None}, AspectRatio -> 7,
LabelStyle -> Large]


where I have incorporated the suggestion, but it gives me a plot that is monochrome. The values 0.9996 and 1.0004 correspond to the maxima and minima. What is going on here?

plot1 = Plot3D[{r^2, -r^2}, {x, -Pi, Pi}, {y, -Pi, Pi},
ColorFunctionScaling -> False,
ColorFunction -> ColorData[{"ThermometerColors", {-20, 20}}],
BoxRatios -> {2, 2, 3}];
plot2 = ContourPlot[r^2, {x, -Pi, Pi}, {y, -Pi, Pi},
ColorFunctionScaling -> False,
ColorFunction -> ColorData[{"ThermometerColors", {-20, 20}}]];

Legended[GraphicsRow[{plot1, plot2}], BarLegend[{"ThermometerColors", {-20, 20}}, 20]] Update: For the specific example in OP's updated question, the following changes produce the desired result:

Change plotops appearing in the part generating figure3b to

plotopts = {Frame -> True,
FrameTicks -> {{{4.18, 4.19, 4.20}, None}, {{1.33, 1.34, 1.35},
None}}, LabelStyle -> Large, ImageSize -> 400,
PlotRangePadding -> None, ColorFunctionScaling -> False,
ColorFunction -> ColorData[{"ThermometerColors", {0.9996, 1.0004}}]}


and use the same scaled colors in the ArrayPlot that generates the legend:

figure3bLegend =
ArrayPlot[legend, ColorFunctionScaling -> False,
ImageSize -> {200, 350},
ColorFunction -> ColorData[{"ThermometerColors", {0.9996, 1.0004}}],
DataRange -> {{0, 1}, {0.9996, 1.0004}},
FrameTicks -> {{0.9996, 0.9997, 0.9998, 0.9999, {1.0000, "1.0000"},
1.0001, 1.0002, 1.0003, 1.0004}, None}, AspectRatio -> 7,
LabelStyle -> Large]


and add the option ImageSize->400 in plotops used in generation of figure3a.

With these changes

Row[{figure3a, figure3b, figure3bLegend}, Spacer]


gives • I'm actually having a little trouble. I edited my question to reflect this
– Tom
Oct 29, 2014 at 3:47
• Tom, could you include in your post the values/definitions of w, theta, phi, dirac3a, zoom so that we can reproduce the issue?
– kglr
Oct 29, 2014 at 4:04
• Sorry yes that's more helpful, question updated.
– Tom
Oct 29, 2014 at 9:45
• Tom, you have ColorFunction appearing twice in your plotopts and the second one is ignored. If you remove the first one, i.e., plotopts = {Frame -> True, FrameTicks -> {{{4.18, 4.19, 4.20}, None}, {{1.33, 1.34, 1.35}, None}}, LabelStyle -> Large, PlotRangePadding -> None, ColorFunctionScaling -> False, ColorFunction -> ColorData[{"ThermometerColors", {0.9996, 1.0004}}]}`, it should work.
– kglr
Oct 29, 2014 at 12:08