Slashdot Mirror


Graphing Libraries for Java?

Node and Edge asks: "Many interesting problem domains involve some form of graph-based or graph-like information: network activity visualizations; social software; workflow management; P2P software development; and version control with branching, just to name a few. It is notoriously difficult for people to visualize a graph structure - unless it happens to be a strictly hierarchical tree-like structure, such as what we know from file-system explorers. Now, with all of that said, what graph libraries can you recommend? The following criteria apply, though they're not absolute: Java or Java bindings; simple to use for simple applications; and polished, extensible UI components. I'm familiar with JGraph, JUNG, Prefuse, OpenJGraph, Tigris GEF, Eclipse GEF, Graphviz, but have not had a chance to evaluate them all. Have you used any of these extensively? If so, can you provide any constructive advice? If not, can you recommend something else, ?"

12 of 51 comments (clear)

  1. SVG! by MORTAR_COMBAT! · · Score: 3, Informative

    I guess I don't know the exact problem domain you are working with or what application environment you are looking to present graphs with... but server-side SVG generation has worked pretty well for us.

    Check out Batik and see if it can fit your solution.

    --
    MORTAR COMBAT!
    1. Re:SVG! by Black+Acid · · Score: 2, Informative

      You could, in theory, use SVG to display graphs. I actually considered doing this for a project I was working on last week. Check out, for example, GPS Visualizer. Upload a GPS map with waypoints, and it outputs an SVG file of the map with the access points connected to their locations. (Note that the sample map does not include any waypoints.) Its very neat, you can drag the labels around. With some effort, I'm sure SVG could be used to display an interactive graph that could be manipulated easily. Of course you probably wouldn't want to implement the graph algorithms in JavaScript (to interact with SVG) for any serious application, but there's nothing stopping you. At the very least, SVG might be worth looking into for visualizing the graphs generated by your Java program.

    2. Re:SVG! by MORTAR_COMBAT! · · Score: 2, Informative

      Please stop confusing graphics with graphs.

      please stop confusing SVG with some other technology that cannot display graphs. In fact my company uses SVG technology to display all kinds of information in graph format, rendering server-side SVG to PNG for display by a web browser using Batik. When browser support is fixed we will be able to simply send the SVG itself and provide more interactivity with the graph (not graphic) by being able to click data points, for example.

      --
      MORTAR COMBAT!
  2. yEd by Will+Sargent · · Score: 3, Informative

    yEd is pretty good. It builds off the yFiles library.

  3. Graphviz works pretty well by Anonymous Coward · · Score: 3, Informative

    My solution for graph visualization was to use Java to dump graphs in a DOT-format file for Graphviz, and then use dot/neato to generate SVG. It works pretty well - clean output, and reasonably fast for moderately-sized graphs in dot. (Neato is much slower).

    1. Re:Graphviz works pretty well by RootsLINUX · · Score: 2, Informative

      I have also used GraphViz and I find it very useful. I've used GraphViz in research to create a DAG of simulated computer intrusion paths in this paper: PDF. I think it's a fun piece of software to play around with, and I've also used it in some visualizations for my senior design project (though I forgot what for) and to produce an image detailing the source tree for my game project. If I ever have extra time (which probably won't happen for the rest of my life) I'd be interested in hacking GraphViz to add a couple features I'd like to see.

      --
      Hero of Allacrost, a FOSS RPG for *NIX/*BSD/OS X/Win
  4. gnuplot by photon317 · · Score: 2, Informative


    gnuplot is kind in this domain. I don't know how you'd cleanly interface to it from inside a jvm other than spawning a native binary of gnuplot and feeding it text commands.

    --
    11*43+456^2
  5. Re:Graph vs. Graphing by Anonymous Coward · · Score: 3, Informative

    "involve some form of graph-based or graph-like information"

    The focus of JUNG is on handling graph data structures.

    The focus of GraphVIZ is on generating graphical representations of graph structures.

    The focus of JGraph, GEF, and others is on creating user interfaces to interact with graph structures.

    Indeed, I'm interested in hearing about libraries that address any and all of: rendering graphs, algorithmic graph manipulation, interacting with graphs.

  6. Workshop on Visualization by jdfekete · · Score: 5, Informative

    Katy Börner and I have been organizing a workshop on Information Visualization Infrastructures, including graph drawing packages. The results are available at http://vw.indiana.edu/ivsi2004/

    There are lots of different tradeofs involved. One being interactive vs. static graphics. Another being the size of the graphs.

    For static graphs, such as class hierarchies and such, Graphviz (http://www.graphviz.org/ works fine and is easy to integrate in a system. For some graphs, Graphviz will not work at all so you need to try first.

    For large or dense graphs, above 1000 nodes or more than 4 times more edges than vertices (5n etc), node-link diagrams don't work at all. You could use a matrix but people are not used at reading matrices.

    For interactive visualization of graphs, Jung (http://jung.sourceforge.net/) and Prefuse (http://prefuse.sourceforge.net/) are fine if you have small graphs ()

    If you are a graph wizard and want to analyze large social networks, you can take a look at Pajek (http://vlado.fmf.uni-lj.si/pub/networks/Pajek/) but it is not a free software and runs mostly on Windows.

    Other packages are ok for simple things, stereotyped things or more experimental things. You need to try them on your own problem to decide.

  7. Graphs versus Plots by Bootle · · Score: 3, Informative
    I'd just like to point out, because I haven't seen it mentioned and some people seem to be getting it wrong, that the term 'graph' here is being used for a specific object.

    Just wanted to point this out to anyone new to the area: The graphs being discussed are NOT something you can make in excel, which should really be called plots or charts (in this context). These are not pie charts, or XY scatter plots, there is no least-squares fitting to a Graph.

    What is meant by a graph (in this context) is a collection of nodes (aka vertices) and edges (aka links) connecting those nodes. An example graph could be a friendship network: People are represent as nodes and an edge falls between two nodes when those two people are on a first name basis.

    So Graph Visualization is not trivial at all. Very complex relationships are modelled as graphs and good software is important. I for one use the graphviz port on OS X (that won an apple developers award) after becoming thoroughly sickened with Pajek in windows!

  8. Better off learning a good graphics API (Java3D) by xtal · · Score: 2, Informative

    I've done a lot of projects requiring scientific and mathematical visualization; with a couple exceptions, I was better served by having a background working with OpenGL than expertise with an existing graphics library.

    On average, producing something that looked great and was exactly what I wanted I would estimate the labour effort at between 3-5 productive days. This is at least comparable to the effort I would have spent learning a graphing library, or working around something that I didn't like with an off the shelf solution.

    YMMV.

    --
    ..don't panic
  9. Re:Graph vs. Graphing by Black+Acid · · Score: 2, Informative

    Not to pick nits, but a graph is not a data structure. A graph is an abstract data type, which is commonly implemented using an adjacency matrix or adjacency list. Arrays and linked lists are data structures, graphs are not.