Plotting Equations that Bifurcate
Alex Tweedly
alex at tweedly.net
Tue Nov 3 19:48:57 EST 2020
On 31/10/2020 02:28, Roger Guay via use-livecode wrote:
> Lots of clever ideas here, Alex, but I think you’re missing the point of what I ultimately want to do. I'm building a plotting program for which I want to plot any equation including those that have multiple values of y for a given x. An equation might branch at any point and might even have multiple branches both of which are unknown before plotting.
>
> Of course, there’s always the possibility that I’m not fully comprehending your suggestions??? What does NB stand for? Are you suggesting creating a new polygon every time a branch is detected? That just might work?!
Hi Roger. You're right - I missed the point; I jumped to the assumption
that you were asking about a fairly small, specific issue - so leapt too
quickly to a code sample. But before I address the general question(s),
let me get the little points out of the way :-)
NB - sorry, kind of common usage in British English. Actually, it's from
a Latin phrase - "Nota Bene" - meaning "note well". So basically just
'take note of'.
"a new polygon every branch" - yes, perfectly possible. Also possible is
what I did in the first case of the code sample - a new 'sequence of
points' for each branch, and then stitch those together (with blank
lines between) into a single polygon; but that's, for now, a detail.
The essence of the problem is that your app will (somehow) develop a
number of 'sequences of *data* points' - and then those need to be
translated into equivalent sets of *display* points (by either a
plotting library, or by your own code) to allow it to be displayed
appropriately.
There are at least two possible plotting libraries that might do what
you want (or do something close enough that they could be useful). By
coincidence, they were both discussed at the San Jose LC conference in
2019.If you have access to the video / papers from that you might
already have some of the info you need; I don't know if the conference
papers are ever put out for more general usage later.
Option A. Monte described a wrapper for the JSPlot library. It's a very
powerful library capable of many kinds of graphs / plots, and very quick
and capable. The most obvious downside is that it needs to be used
within a browser widget - but well worth looking at it if you can.
Option B. I did a library called "GraphMaker" - a pure-Livecode plotting
library. It is (I think) fairly easy to use - but that may not be the
case for someone else coming to it new. I know it can handle this case
of bifurcating plots (using multiple sequences of data points). The
conference slides were a decent, if very brief, introduction; the
lengthier documentation was, maybe, not quite complete. However, it does
come with a demo app that uses the library to draw a variety of graph
types. Main advantage is it's pure LC, and hopefully easy to use - both
in understanding and in ease of integration into an app (you just create
a suitable group to contain the graph, set its rect properly and pass in
all the point data along with various parameters. It has nowhere near
the coverage of different graph types that JSPlot does - it's basically
line, bar and scatter plots, with primary X-axis, and can have shading, etc.
Option C. Roll your own.
I'd certainly suggest investigating the use of an existing library
first. There's quite a lot of effort needs to go into determining how to
scale the data to the space available, how to label the axes, how to add
tick marks, grid lines and (perhaps) multiple Y-axes. That stuff
probably accounted for 90% of the effort of creating the library.
If you'd like to try out my library, the latest version can be found at
https://www.tweedly.org/lcms.lc/GraphMaker
(sorry - I haven't formatted it into my usual download structure - so
this is simply a page that gives links that allow you to download the 2
files you need and 2 more files you don't need.)
Of course, I'll be happy to help out in any way I can with it.
Alex.
P.S. the demo app includes an example of a 'branching' plot (Graph 3).
More information about the use-livecode
mailing list