# Strategies to find curves on messy data using FindCurvePath

I have a set of data points that correspond to roots of a transcendental equation with respect to a parameter (the abscissa) which, by the properties of the system, define continuous curves (might be open or closed). There are many roots and some are very close from one another. Here is the actual data set.

A ListPlot shows the data set and some of the branches can be seen:

In order to extract some of the branches, I've used FindCurvePath to my dataSet in the following way:

tmpIdx = Sort[FindCurvePath[dataSet], Length[#1] > Length[#2] &];
ordCrv = Table[dataSet[[tmpIdx[[j]]]], {j, Length@tmpIdx}];


which is, at some measurement, very unsuccessful:

Sorting tmpIdx has the purpose to put the largest sets of data at the front of it; then I can construct some of the curves FindCuvePath is able to find, eliminate those points from dataSet and try again. Of course this works, but it is a lot of hard, manual work and very time consuming, which I wouldn't mind if this were the only data set I had to process.

To help FindCurvePath, I've been applying it not only to dataSet, but also to {f[#1], g[#2]} &@@@ dataSet, where f and g are top of my head chosen (continuous) functions. Again, this works to some extent. The obvious problem is that it involves a lot of manual processing and is not only specific to the data set, but also to the branch in question.

I know there is no universal solution, and at some point manual intervention will be in order, but I was wondering if someone knows or has a better strategy to attack the problem.

Hope I made myself clear. Any comments or suggestions are very welcome.

EDIT

With some lack of judgement, I've just realized that I excluded some data from my analysis, which can be very useful to do the job. What I have is not a 2d list, but a 3d list. Here it can be found.

One can clearly see the separation between curves

Sorry for the omission, it's something I just realized.

EDIT 2

Maybe there is some way to relax the conditions on FindCurvePath so it looks for a piecewise linear curve? By taking a closer look to the smaller curves constructed by the function, it seems that its very unsuccessful whenever there are "return" points. I wish the function documentation were more complete.

• Related: (29294), (29464) – Mr.Wizard Apr 20 '14 at 1:08
• This is one of those questions that's only hard to answer because there seems to be no documentation available about how FindCurvePath actually works. Can anyone give some idea of what the underlying algorithm is? The documentation is incredibly unhelpful. – user484 Apr 23 '14 at 2:30