What good graph layouting, editing & drawing tools are there? - graph

While doing software development I periodically come across the need to draw some graphs for my own use. Sometimes they illustrate relationships in a DB, sometimes they illustrate relationships of code files or classes, other times there are other objects... Anyway, the basic need is the same - I've got some set of nodes & edges that I would like to lay out neatly, add some informative colors/texts/styles and optionally print it out in the end (over several pages if necessary).
Is there a tool that would allow me to do this easily? Features that I would expect:
Import basic node/edge information from a file (the raw data that I have extracted from the DB/code/whatever);
Automatically layout some or all nodes in the graph;
Allow to manually adjust node and edge placements;
Node group manipulation features (relayout, rotate, scale) would also be very nice;
Ability to manipulate visual aspects of the picture - change lines, colors and fonts; add arbitrary texts and pictures (possibly attaching them to nodes/edges);
Ability to modify node contents (sometimes I need just a simple text; sometimes it's a little table; sometimes it's a bulleted list; etc.)
Save/load/print (including to several pages with overlapping areas for gluing together)/export to image (both vector and raster with anti-aliasing).
Added: Here is a sample graph I tried to visualise most recently. I'd like to get a useable layout that needs minimal tweaking before it can be printed.

Graphviz is a long-standing popular one.
I really like yEd's layout engine, which I feed GML data to (but it supports other formats).

You can use Cytoscape, that's a graph visualization tool. I like the forced directed lay out.

I find Gephi very nice, mainly for two tasks:
Browsing the graph, i.e. hidding some parts, moving nodes, trying to understand its properties by playing with it.
Rendering it to export it for a presentation or article?
There are nice layout algorithms included by default, and you can easily install plugins from within the tool.
And if your goal is to get an informative and readable representation of your graph, you might consider using hive plots. Description, examples and tools are available from this page. The basic idea is to use a deterministic method (by opposition to force-based layouts) to place nodes, based on a few attributes or topological measures. The resulting representation allow efficiently comparing different graphs, or even the same graph considered from different perspectives.

Related

Gephi automation: how to make multiple graphs at once

I am looking for a tool to automate making graphs with Gephi. I have dozens of similar graphs to prepare (only labels and figures in data differ), so need something able to automatically:
load nodes and edges from a file (e.g., csv)
set up layout (e.g., "type='force atlas 2', iterations=n, threads=m, scaling=p, gravity=q...")
apply selected laoyut
tune appearance (ranking: color, size)
export graph
I am aware of Gephi Toolkit, but it is for Java. Maybe there is some other way to automate Gephi? (or I will have to learn Java, which is not bad, but requires time)
I've also found Gephi Scripting Plugin, which is good but lacks some features, e.g. can't set up layout (only runs it with default settings).
Thanks in advance!
It is a bit tricky and haven't tried myself but if you don't want to get your feet wet with Java then you could try one of the automation frameworks that allow you to control a GUI application, e.g. Robot, PyAutoGUI or if you use Windows you can use pywinauto.
I know it not a complete answer but it might give you a lead.

Is there any method for fix manually an Alloy Analyzer graph?

I need to fix my Alloy graph, for example I have this output:
I can't move "node2" rectangle over the row of "node0" and "node1", and I can't move "node1" under "node2" whitout also move "node0". Is there any solution? Thank you.
PS: I am using Alloy Analyzer 4.2 under Windows.
PPS: This is only an example, i get a big graph with 5 or 6 rows of 20-25 rectangles, and if I can't fix it manually, it's only a mess.
To answer the direct question: I for one have never found a way to make the visualizer change its mind about which nodes should be on the same horizontal level. (That doesn't quite mean it's not possible, but it does mean that if it's possible it's not immediately obvious how to do it. But I guess you knew that already.)
If your goal is to make the auto-generated diagrams easier to read, the simplest approach is to experiment with adjustments to the visualizer theme. The "Magic Layout" button can be helpful; manual adjustments to hide some nodes or display some relations as labels rather than arcs can help with diagrams which are otherwise too cluttered.
If your goal is to make a 'good' version of a diagram for inclusion on a slide for a talk or a figure for a paper, you may want to export to Dot and import into a graph-drawing tool that gives you the kind of manual control you want (or edit the .dot file yourself, if you are familiar with graphviz and can make it do what you want), or export to XML and generate the graph description language of your choice from the XML.
I hope this helps.
The Lightning tool is an Ecplise plugin relying on Alloy4.2 to formally define Domain Specific Languages and might be a solution to your problem.
It's still under development, but if you are only interested in being able to freely reorganize each atom and label of generated instances, there shouldn't be any problems, as it uses Ecplise draw2D to render those latter.
If now you're really interested in providing an intuitive visualization to your generated instance (by intuitive I mean a visualization that is closer to its domain rather than the structure of your model), then you can define your own language (with your model as abstract syntax ) and define a concrete syntax for it.
The update site to be used for the installation of the tool is : http://lightning.gforge.uni.lu/update-site
Don't hesitate to contact me if you plan to give it a shot and get any issues.
(I'm eager of constructive feedbacks ;-) )
The steps to follow to generate a graphical instance in which any components can be moved are :
Install Lightning
Create a new Lightning Project
Create a new Language in this project
Put your model in the ASM folder
generate instances of the language by "running the project"

Library or advise on plotting box nodes interactively

I'm building an application that parses text files that contain information about specific nodes with incoming ports and outgoing ports that are interconnected. Doing some research there are some libraries but none of them support the exact characteristics needed.
this is what I'm trying to build and any language will do: Python, Perl, .net, etc.
One of the libraries I have found is GoDiagaram Node Classes
http://www.nwoods.com/components/dotnet/features-nodes.htm
The idea is to have boxes like so, interconnected and I should be able to click on one of them and link it to a new sub-diagram with more boxes contained in the one clicked.
Is there a counter part of these kind of charts that is opensource? and do these diagrams have a specific kind of name?
I don't know any specific details, since I never looked into this too closely, but here are some potential directions:
The data structure used for representing something like this is usually a graph (probably a directed graph). You could also try searching for graphical (or visual) programming languages. I seem to remember Pure Data as one that was relevant, but I never looked at it in detail.
Blender and VirtualDub both have a mode that's similar to this (the node editor and audio filters, respectively) and I believe both are open source, although I think neither has the option of having the nodes contain other nodes internally.
You could just use LabVIEW, which gives you the ability to create and edit LV code programmatically (search for "VI scripting"), but the code for that might not be very pretty and it's certainly not open source.

I want to create some very specific heatmaps. Can it be done?

First of all, I'd like to explain what I want to achieve.
Imagine that I own a leaflet drop business. I cover a city, which is divided into 10 sections.
I want to leaflet-drop those 10 sections systematically, and have a heatmap that shows when they were last done (ie, if an area was done just last week, it would show up as green, but if it was done 6 months ago, it would be red.)
However, occasionally, I would do additional leaflet drops within the area, that I wouldn't want to be included in the data above - these would then show up on the heatmap in, say, blue.
I've been looking at OpenLayers, and it seems like it can do what I want - but I'm not really that technical, so need advice. OpenLayers has the ability to select specific areas with a polygon tool, which is exactly what I need - but how can I input this data, which will change frequently?
I currently monitor coverage of the territories with an Excel spreadsheet, but would like this heatmap system in addition to that.
So - any ideas?
Heck, for a tool for you to use yourself, you could use a drawing package like Inkscape. Scan a map of the area, paste that in, draw polygons for the areas you care about, and then every time you do a drop, change the colour of the polygon.
OpenLayers is generally used by software developers to aggregate geospatial/map data from various sources into web applications used by many users. OpenLayers can do what you want but not without writing a fair amount of JavaScript code. You might be looking more for a tool like ESRI's ArcCatalog, although it is probably too powerful for your needs.
I did a quick google search of "best map drawing tools" and found SmartDraw, for example. I have no affiliation with SmartDraw, nor do I know if it's any good, but it seems like this type of software would be more suited to your needs.
For what you say would be more useful a desktop tool as e.g. http://www.qgis.org/ (is open source and free)

Does anyone know how to create a interactive graphs using flare or other visualisation classes?

Does anyone know of software or flex/flash/as3 source or visualisation software that could be used to make interactive graphs, where the user would enter a query that would pull data from a MySQL database and the user would build a sunburst or icicle graph by dragging and dropping items into a tree-like structure and they would be able to view the graph? i have attempted to use flare but my programming skills are pretty bad. So far from what i gather, flare only allows the graphing of defined datasets rather than allowing a user to modify the dataset and thus creating a new dataset.
Help?
This is far too big for the scope of a single question. You're going to need to write at least a few different pieces.
1.) Access to the database and a way to view datasets
2.) Control handlers to drag and drop datasets onto your chart object
3.) A chart object that can handle receiving dropped dataset items and render itself accordingly.
There are lots of good charting frameworks out there including Flare, Axiis, Flex charting, Fusion Charts, iLog Elixir. I'm not sure what you're trying to do but any one of those should be able to serve as your charting piece.
We worked on a project that used Flare and Flex. We had to provide the data to Flare in an XML format called GraphML, so we had code to convert the data into the required format in our C# backend, and then we passed it to Flex. There were naff all tutorials for it though, so took some time to figure it out.
There is a properly cool graphing tool (although its commercial) called Kapit. Check out their Diagrammer and Visualizer demos. It could be the case that its worth the spend.
But I agree with Mr Owen, theres some mad scope in that question:)

Resources