Command Line Interface, Menus / Dialog Boxes, Spreadsheet, Notebook (like mathematica), Web appli.
Many teachers prefer to use a CLI, even with their beginner students, because it forces good habits in data analysis (the user must really know what he is doing). A beginner in front of a simple GUI can click everywhere and get results anyway, even if these results are meaningless.
best practice when desinging a GUI. Also : offer two levels (or more): beginner / expert user. And choose your goal: teaching, research or demonstration.
older, based on OCaml 3.01 or 3.02. Fairly high-level binding to the plplot libraries which is quite easy to use.
Currently no API to create point labels, but this can be done with a small amount of touch-up work from the GUI (under Plot->Set Appearance->Ann. values).
OpenGL is the most cross-platform GUI-capable API and runs on virtually any modern computer, typically with performance orders of magnitude better than anything you'll get with Qt, GTK, WxWindows or any other software renderer.
Each of the 3 openGL binding resolve the problem of the GLenum parameters (that often collide between several functions) in a different way.
There's also the problem of C buffers (C arrays).
A dynamic cross-platform Ocaml binding for OpenGL and extensions.
Also look for "deuglification tutorial".
Interface to GTK2. more widgets in gtk2, but they can be harder to use.
Also have a look at http://coherentgraphics.blogspot.com/2008/03/proper-gui-for-ocaml-part-one.html
OCaml Visualization Toolkit is built around cairo-ocaml.
Not a library, it doesn't control invert. It is a monolithic framework. Your code will no longer be composable. In particular, there is no way to compose two such frameworks, for example you cannot use it with an event driven GUI framework. To quote the manpage: "In order to process events, an application needs to call event_dispatch(). This function only returns on error, and should replace the event core of the application program." Just try telling a GUI that *also* demands you use ITS event loop that!
The only proper way to use libevent would be to spawn the dispatch loop inside a pthread, and use the hook functions to communicate with your program via channels. It isn't immediately clear this would work (libevent's single page of documentation doesn't explain if it works when spawned inside a pthread).
hardware-accelerated vector graphics library, suited to write visualization software.
There is a full version (with source code) and a free version (bytecode only).