ListPlot3D weirdly distorts and loses plotting data
Not certain what is going on but you can work around with Interpolation
.
ifoo = Interpolation[ha, InterpolationOrder -> 1];
Show[
ListPointPlot3D[ha,
PlotRange -> All,
AxesLabel -> {"x", "y", "z"},
ImageSize -> Large],
Plot3D[ifoo[x, y],
Evaluate[Sequence @@ MapThread[Prepend, {ifoo["Domain"], {x, y}}]],
PlotStyle -> Opacity[.5],
MeshFunctions -> {#3 &}]
]
You should send your example to Wolfram Support as I think it should work with the InterpolationOrder
option of ListPlot3D
but that does not appear to change the plot. Would like to know what they come up with.
Hope this helps.
The issue seems to be caused by vastly different scales in x and y coordinates. We can replicate the issue by re-scaling one of the first two columns:
SeedRandom[1]
dt1 = Join @@ MapIndexed[Append[#2, #] &, RandomReal[1, {5, 10}], {2}];
dt2 = MapAt[10^-4 # &, dt1, {All, 1}];
Row[ListPlot3D[#, ImageSize -> 400] & /@ {dt1, dt2}]
An easy fix is to (1) re-scale each column to the unit interval, (2) ListPlot3D
the re-scaled data, and (3) post-process to undo the scaling:
ClearAll[reScale, scaleBack, undoScaling]
reScale = Transpose @* Map[Rescale] @* Transpose;
scaleBack = Transpose[MapThread[Rescale,
{Transpose[#], MinMax /@ Transpose[#], MinMax /@ Transpose[#2]}]] &;
undoScaling[x_] := # /. GraphicsComplex[a_, b__] :> GraphicsComplex[scaleBack[a, x], b]&
lp3D = undoScaling[ha] @ ListPlot3D[reScale @ ha, Mesh -> All];
Show[ListPointPlot3D[ha], lp3D, ImageSize -> Large, AxesLabel -> {"x", "y", "z"}]