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 &}]
 ]

Mathematica graphics

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}]

enter image description here

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"}]

enter image description here