Is there a good interactive 3D graph library out there? - layout

I'm looking for a library that will layout and display graphs (i.e. network diagrams, not charts) in 3D, with some interactivity like selecting and dragging nodes, rotating the display etc. I would like to do this in a web page so Javascript or Flash are preferable, I'd also consider Java.
Having looked myself I realise the options are very limited so I'm interested to hear of any such libraries regardless of language or interactivity, even if they don't run in a browser. 3D is essential though, there are other questions on this site convering 2D libraries.
Update: please, stop adding details of 2D graph libraries. As the question states, I'm only looking for 3D libraries and there are other questions covering 2D graphs.

Walrus
Pros: great looking interactive 3D graph library, in Java.
Cons: not actively maintained, last update in 2003.
(source: caida.org)

It's C++ & SDL/OpenGL, but you might find Forg3D of interest (see also this paper).
I have no experience with it myself.

You may find this useful:
Processing is an open source
programming language and environment
for people who want to program images,
animation, and interactions.

WilmaScope is a Java 3D network editor. Nice screenshots here and here.

Starlight is a powerful 3D visualization tool I used once, several years ago (2005?) for a project. I remember it being quite powerful at the time. Then I was not concerned with a web UI. It is still actively maintained and has a separate non-government entity to handle commercial licensing.

Related

Is it viable to build a Web Dashboard in Clojure?

I am planning to build a web dashboard where I can analyze the financial records from a company through graphics, tables, ...
I already have the software, so the dashboard will only read the data, and not manipulate it.
It will be something like this, but simpler. Containing reports, graphics, options to select dates, intervals, etc.
But I am thinking, is it viable to use Clojure? And jQuery, CSS, HTML also.
Currently I work with the Luminus Web Framework for Clojure, but I am wondering if it is worth to do this in Clojure or if there are other languages that are better to do it.
Of course I am familiar with the language already, so it is a pro. But I am also open to suggestions.
It is not that hard at all! In fact, there exist great libraries which solve all the challenges involved in building a dashboard - scheduling, caching, transferring data to the client, visualization(and auto reloading).
We are working on a framework for building realtime Clojure dashboard. Have a look at https://github.com/multunus/dashboard-clj. We have used the following libraries:
Immutant's scheduler for scheduling
Core.async to simplify data flow on the backend
Sente for websocket communication
re-frame for client side state and view management
Stuart Sierra's component library for managing stateful components
In order to create beautiful visualizations you may take a look at d3 or highcharts. CLJSJS and Reagent cookbook will gives a good overview of how to use these js libraries(and many many more).
Clojure is an absolutely fantastic tool for building a web dashboard. The other answers here do a pretty good job of laying out the landscape as far as basic web technologies. On this side of things, I'll simply add I'm a big Reagent / Re-frame fan, and would go that route for React wrapper over Om.
As far as data visualizations, you may be interested in checking out Vega-Lite & Vega, which you can use from Clojure or ClojureScript (Reagent) by using a simple but flexible dataviz library I wrote called Oz:
https://github.com/metasoarous/oz
Vega-Lite & Vega are designed based on the ideas of the Grammar of Graphics, which inspired R's popular ggplot2 library. The core idea is that data visualizations should be built according to declarative descriptions of how properties of the data map to aesthetics of the visualization. Vega-Lite & Vega however take things one step further in providing a grammar of interaction, which allows for the construction of interactive data visualizations and sophisticated explorer views. Moreover, it ups the ante on the declarative nature of the GG in that Vega-Lite and Vega specifications are described as pure data (JSON), making it very in line with the data-driven philosophy of the Clojure world, and paving the way for seamless interoperability with other languages and sharing features.
Vega-Lite is more or less the higher lever, day-to-day data science tool, focusing on providing high leverage and automation based on very spartan specifications. It compiles to Vega, which is a somewhat lower level and more powerful, but less automated version of Vega-Lite. Usually starting out with Vega-Lite, and switching to Vega only as needed is sufficient.
For more on Vega & Vega-Lite see: https://vega.github.io.
I don't see any reasons why it wouldn't be viable to build a web dashboard in Clojurescript.
I suggest that you look into a library call reagent, which provides a minimalistic interface between react and clojurescript, so theoretically everything you can do with react should be possible in clojurescript/reagent (with the added benefit that it will be faster than React). You probably might be interested in reframe which is a framework for building single page applications.
React has been proven as a robust tool to build powerful UI.
You can do everything you can do in JavaScript using ClojureScript (just as you can do everything you do in Java using Clojure). So as others have commented, I would definitely recommend ClojureScript, especially since you know Clojure already. You may find out that you do not need jQuery etc.
The common choice to generate html is to use React.js via a wrapper library like:
reagent
Om
Both can generate HTML.
Reagent (and maybe re-frame) are the easiest ones to get started. Especially since there are components libraries like soda-ash, and a hiccup-like syntax.
Om (by the creator of ClojureScript), and maybe untangled are also a good choice, especially if you need to manage complex data. You can get a hiccup-like syntax via sablono.
Dashboards have been built using it (see the circleCI dashboard as a real-life dashboard example). This is the one I use personally.
Hoplon is also an interesting choice, as you mentioned.
Also have a look at cljsjs for pre-packaged js libraries.
As for the CSS, this is an orthogonal concern but yes of course you can use it (or even less and sass, there are Clojure wrappers for it). You can even generate CSS from Clojure code with garden,
You can find an example project using boot (by the same authors as hoplon), sass, reagent called saapas, but there are many more in the wild.
As you see there are many viable options in ClojureScript to build a dashboard. I am myself building one and settled on Om.next, partly because I was using React.js before.

Simple, powerful visualization

I am looking for a tool/framework to do some simple, yet rather intensive visualization.
I have ~10000 points in a 2D space. All I need to do is plot these points, then have them animate from place to place on a second by second basis. Up until ~1000 points I was able to achieve this using Raphael.js in a web-browser, however I need a more powerful solution now.
Does anyone have any ideas where I should be looking for such a tool?
Preferred interface languages: Ruby, C, Java, Haskell or a REST API
You could give Processing a try. If you're familiar with Java and C the processing syntax should be comfortable. Alternatively there is a JavaScript version, processing.js you could try.
TK -- typically used with Tcl. A very simple cross platform GUI scripting language. I have been using it successfully for a variety of 2D UIs capable of displaying 10e6+ shapes on a canvas and have recently used it for C++ heap map visualizer GUI. Lots of cut/paste code fragments available on the wiki page. There are multiple ways to use it from within C++, including SWIG-based binding.

Fast Interactive force-directed graph layout engine

I need a framework/library which will enable me to develop a realtime interactive graph simulation. The user must be able to dynamically add nodes and edges. I have found Prefuse and its force directed layout and I really like it. But it is not fully thread-safe, and doesn't perform all that well -- maybe it has problems with big graphs?
Are there some decent alternatives? I know about Flare, but I have no desire to learn ActionScript and would rather stick with c++/java/c#.
yFiles is a good commercial library (Java, C#, ActionScript, Javascript versions available) for interactive graph visualization, that supports wide range of layouts, and has no problems showing very big graphs. You can test its capabilities quickly by trying yEd, which is based on yFiles.
The question is a bit old but still let me introduce another commercial option for C#. GraphX for .NET PRO is capable of rendering thousands of vertices and edges simultaneously and supports variety of force-directed layouts. There is also free open-source version which is less performant but supports easy styling features.

Are there standards for flowcharting websites?

I had some trouble figuring out how to funnel users through different stages on a website I'm building and I figured that drawing a flowchart might help me see things clearer. So I started drawing a chart in Dia and an hour later I'd figured out what models and views I need to add and how to interconnect them. Given a little time, I can really see this kind of charting becoming a useful asset in my web development skill set.
One thing that bothered me though was the lack of symbols for common stuff related to web development. A symbol for forms would be nice. Maybe a way to indicate AJAX requests. I'm sure you can think of lots of other stuff. What are people using to visualise such things? Is there a standard set of symbols that I should use? I stumbled across UML years ago but never really got comfortable with it. Could that be used for charting web sites or is it not well suited to this task?
I use sequence diagrams to document the flow from page to page (including Ajax requests). Within a page, activity diagrams are often useful
For an excellent, short, and readable introduction to the use of UML, see UML Distilled
Another option: Jesse James Garrett's visual vocabulary for interaction architecture and design.
I don't use it personally, prefer using UML Activity/State diagrams. However a few UX designers I know are strong advocates. ymmv.
I don't beleive there are official standards but the shapes never seem to differ likewise. For an operation use a box. Start and end use an oval. For a decision use a diamond. The graphical ones aren't standard, but can still be used.

Best thing for 3D and raytracing

I want to play around with some graphics stuff. Simple animations and things. I want to fool around with raytracing too. I need help finding a library that will help me do these things. I have a few requirements:
Must be able to do raytracing
Must be for a high level language (python, .NET, etc.). Please no C/C++
Must have good documentation, preferably with examples.
Does anyone know of a good library i can use to fool around with?
Have a look at blender.org - it's an open-source 3d project with python scripting capabilities.
First thing that come to my mind is the popular open source P.O.V Raytracer (www.povray.org). POV scenes are defined entirely with script files, and some people made Python code to generate them easily.
http://code.activestate.com/recipes/205451/
http://jabas-unblog.blogspot.com/2007/04/easy-procedural-graphics-python-and-pov.html
I'm not aware of any libraries that satisfy your request (at least not unless I decide to publish the code for my own tracer...).
Writing a tracer isn't actually that hard anyway. I'd strongly recommend getting hold of a copy of "An Introduction to Ray Tracing" by Glassner. It goes through the actual math in relatively easy to understand terms, and also has a whole section on "how to write a ray tracer".
In any event, a "library" isn't all that much use on its own - pretty much every ray tracer has its own internal libraries but they're specific to the tracer. They typically include:
a base class to represent 3D objects
subclasses of that for each geometric primitive
vector and matrix classes (3D and 4D)
texturing functions and/or classes
light classes of various types (point light, spot light, etc)
For my own tracer I actually used the javax.vecmath packages for #3 above, but had to write my own code for #1 and #2 based on the Glassner book. The whole thing is well under 2k lines of code, and most of the individual classes are about 40 lines long.
I believe there are few people putting together ray-tracers using XNA Game Studio.
One example of this with code can be seen over at:
Bespoke Software ยป Ray Tracing - Materials
The well developed raytracers that are open source are
Yafray
Povray
For realtime 3D (it will be language dependant of course) there is JMonkeyEngine (Java) not sure whether that meets your "high level language" requirement.
You could consider a 3D game scripting language too, like GameCore or BlitzBasic

Resources