Going off of @corey979 's comment. A slightly more rigorous way to fix your problem with corey's answer is to use the `standard deviation`, as opposed to the arbitrary rounding of `1`. Length /@ DeleteDuplicates /@ (Round[#, StandardDeviation[#]/35] & /@ Transpose[pts]) Note that the `35` is arbitrary, and you should be modify it to whatever works best for you. Also, this works for `pts*100`