So like image_doctor pointed out, you need to have your plots have the same range to overlay them. Then there is the fact that you are laying one carpet on top of the other, like m_goldberg pointed out.
But there are ways to deal with this. First, some data
data1 = Table[(x - 1)^2 + (y - 1)^2, {x, -4, 4, .1}, {y, -4, 4, .1}];
data2 = Table[3 (x + 1)^2 + (y + 1)^2, {x, -4, 4, .1}, {y, -4, 4, .1}];
When you plot them with ListContourPlot
, be sure and give them both the same DataRange
plot1 = ListContourPlot[data1, DataRange -> {{-4, 4}, {-4, 4}}];
plot2 = ListContourPlot[data2, DataRange -> {{-4, 4}, {-4, 4}}];
Show[plot1, plot2]
But that looks awful, one is completely covering the other one. Personally, I don't like for my contour plots to have color shading - I'm old fashioned, I like a white background. That works great with this:
plot1 = ListContourPlot[data1, DataRange -> {{-4, 4}, {-4, 4}},
ContourShading -> False, ContourStyle -> Blue];
plot2 = ListContourPlot[data2, DataRange -> {{-4, 4}, {-4, 4}},
ContourShading -> False, ContourStyle -> Red];
Show[plot1, plot2]
But if you are dead set on using the color shading, then make one of them transparent:
plot1 = ListContourPlot[data1, DataRange -> {{-4, 4}, {-4, 4}}];
plot2 = ListContourPlot[data2, DataRange -> {{-4, 4}, {-4, 4}},
ColorFunction ->
Function[f, Opacity[.5, ColorData["BlueGreenYellow"][f]]]];
Show[plot1, plot2]
Edit: You can obviously also do this with your example data, which simply came from the Help page on ListContourPlot
a = ListContourPlot[RandomReal[1, {10, 10}], InterpolationOrder -> 3,
PlotLegends -> Automatic, DataRange -> {{1, 30}, {1, 30}},
ContourShading -> False, ContourStyle -> Dashed];
b = ListContourPlot[
Table[Sin[i + j^2], {i, 0, 3, 0.1}, {j, 0, 3, 0.1}],
PlotLegends -> Automatic];
Show[b, a]
Show[{b, a}]
for your first case, perhaps adding color/colorfunction/transparency options to each plot? $\endgroup$