With the missing piece from http://mathematica.stackexchange.com/questions/136188/how-do-i-read-out-the-vertex-names-on-this-graph/136192#136192 I can self-answer using [`Nearest`](http://reference.wolfram.com/language/ref/Nearest.html) and [`Graph`](http://reference.wolfram.com/language/ref/Graph.html). Please don't let this post discourage answering as I am eager to see other approaches. Now as a function with at least a little reusability. The second parameter is the search radius. order[data_, rad_: 0.0001] := Module[{dd, near, g}, dd = Join @@ data; near = Nearest[dd -> Automatic, dd, {2, rad}]; g = Graph[ Partition[Range @ Length @ dd, 2] ~Join~ Cases[near, {_, _}] ]; FindPath[g, ##][[1]] & @@ GraphPeriphery[g] ] ListLinePlot[Part[Join @@ dat, order[dat]], Frame -> True] [![enter image description here][3]][3] It works on the set with gaps given a sufficient radius: ListLinePlot[Part[Join @@ dat2, order[dat2, 0.0001]], Frame -> True] [![enter image description here][5]][5] The next step in improving this would be to extract direction data from the output of `order` to apply to full lines. [1]: http://mathematica.stackexchange.com/users/590/halmir [2]: https://i.sstatic.net/2OXNs.png [3]: https://i.sstatic.net/9OoEc.png [4]: https://i.sstatic.net/8ST29.png [5]: https://i.sstatic.net/Ni3Xw.png