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[pts][[1]]/35] & /@ Transpose[ pts][[1]], (Round[#, StandardDeviation[pts][[2]]/36] & /@ Transpose[pts][[2]])} Note that the `35` is arbitrary, and you should modify it to whatever works best for you. Also, this works for `pts*100` P.S. A prettier version of the code doesn't give the correct answer, unfortunately Length /@ DeleteDuplicates /@ (Round[#, StandardDeviation[#]/35] & /@ Transpose[pts])