I've found most graphing software too clunky, or having too much mental friction, for my purpose of creating graphically represented plans, to convert written diagrams into digital form, or to do preference inference based on the structure of my goals (amongst other things).

So far the only tool that I've seen that reduces this friction is GraphViz [1], since I think I can literally just list down connection after connection in markup, with no care for structure or reasonableness, and then prune connections after I see how the entire thing looks. Point and click is for suckers.

However, I also like the approach of Freemind that quickly outputs a visual map that is easily traversable; but it doesn't do much for me when the causality is more involved.

Are there any alternatives that anyone is aware of?

[1] If you are not familiar with GraphViz, see this amusing introduction that maps the social network in R. Kelly's hit hip hopera, "Trapped in the Closet".

New Comment
14 comments, sorted by Click to highlight new comments since:

yEd can read in graphs in XML format and automatically lay them out, but also lets you tweak the layout with a mouse.

Yeah, Leverage Research does tons of work on "graphically represented plans" and "preference inference based on the structure of goals", and I think they all use yEd. There's a few settings you should tweak at the beginning and then it's pretty smooth sailing.

Here are instructions for setting up the defaults the way some people have found helpful:

  1. Open yEd.
  2. Create a new document.
  3. Click the white background; a small yellow square should appear on the canvas.
  4. Click the small yellow square so as to select it.
  5. Click and drag one of the corners of the yellow square to resize it. Make it the default size you'd like your text boxes to be. You will be able to change this later.
  6. Make sure the yellow square is still selected.
  7. Look at the menu in the lower right. It is called "Properties View". It will show you information about the yellow square.
  8. Click the small yellow square in the menu next to the words "Fill Color".
  9. Select the color white for the Fill Color.
  10. Lower in the menu, under "Label", there is an item called "Placement". Find it. Change Placement to "Internal" and "Center".
  11. Right below Placement in the menu is "Size". Find it. Change Size to "Fit Node Width".
  12. Right below Size is "Configuration". Find it. Change Configuration to "Cropping".
  13. Right below Configuration is "Alignment". Find it. Ensure that Alignment is "Center".
  14. In the upper toolbar, click "File" then "Preferences".
  15. A menu will come up. Click the "Editor" tab.
  16. You will see a list of checkboxes. "Edit Label on Create Node" will be unchecked. Check it.
  17. Click Apply.
  18. In the upper toolbar, click "Edit" then "Manage Palette".
  19. A menu will come up. In the upper left there will be a button called "New Section". Click it.
  20. Name the new section after yourself.
  21. Verify that the new section has been created by locating it in the righthand list of "Displayed Palette Selections".
  22. Close the Palette Manager menu.
  23. Doubleclick your white textbox to edit its label.
  24. Put in something suitably generic to indicate a default textbox. I use "[text]" (without the quotes).
  25. Select your white textbox. Be sure that you have selected it, but are not now editing the label.
  26. Right click the white textbox. A menu will appear.
  27. On the menu, mouse over "Add to Palette", then select the palette you named after yourself.
  28. On the righthand side of the screen, there will be a menu at the top called "Palette". Find it.
  29. Scroll through the palettes in the Palette menu until you find the palette you named after yourself. Expand it.
  30. You will see your white textbox in the palette you have named after yourself. Click it to select it.
  31. Right click the white textbox in the palette. Select "Use as Default".
  32. To check that you have done everything properly, click on the white background canvas. Did it create a white textbox like your original, and then automatically allow you to edit the label? If so, you're done.

Then... a. Click the white background to create a box. b. Click a box and drag to create an arrow. c. Click an already existing box to select it. Once selected, click and drag to move it. d. Doubleclick an already existing box to edit its label.


There's a few settings you should tweak at the beginning

Deets? I use yEd all the time, but I've never made any tweaks.

I use Dia. I don't entirely understand what you're trying to diagram, so I'm not sure how well it would work for you. I've used it for data flow diagrams, state transition diagrams and flow charts, and occasionally for entity relationship diagrams and UML diagrams (though it's not exactly good for those last two types). It's easy enough to use that I prefer it over paper. I don't think it has any way to automatically generate diagrams, though.

I use tikz/pgf for drawing graphs in my papers, but that is maybe not a scalable solution (unless you write some software to automatically generate tikz/pgf directives).

FWIW I've been looking into this issue for quite a while, several years actually, and never found anything worthwhile. I've taken a few stabs at writing my own code for causal tree traversal/pruning/building. All my attempts have suffered from similar failure modes, for example, the easier it is to build a complicated interlinked tree, the harder it is to edit or clean up.

The cleanest simplest tool for sequence diagrams is http://sequencediagram.org it is very easy to work with

GraphViz and freemind both are good for use but comparatively graphviz is much better than freemind. There are various other charting software available now a days with different features in them.

chart software


Let's make it! Who's in to help program? I'll start a github repo and a google group as soon as a few people are committed.

  1. State the amount of time you are willing to commit.
  2. State the worst case amount of time you would be able to commit.
  3. State your first and second choice of language.
  4. (Optional) Share any thoughts you have on how best to approach this challenge.
  5. PM me your github username.

I've got a notion to develop to-do list software with an emphasis on dependencies for my own use; since I haven't written it yet I don't have any actual help for your question, but I'm curious what you mean by “preference inference based on the structure of [your] goals”, as it sounds potentially relevant.

preference inference based on the structure of [your] goals

It's nothing too formal - wisdom gleaned from an article here and a blog post there.

Most of us readily have a list of goals that come to mind, but it's likely that they are subgoals and we are unaware of why exactly we do them. So, you keep on asking "What will this goal do for me?" instead of "What will do this goal for me?", creating downwind nodes in your graph until you presumably hit your preferences. In which case you (a) could check your preferences for consistency and overlap (see Nozick), and (b) investigate if your current subgoals are the best way to maximize your preferences, or find new ones.

Apparently this can be prescribed from the Connection Theory framework, but I haven't found it necessary to study Connection Theory. They make some interesting guesses about what happens when our stated goals conflict, amongst other things.

Most of us readily have a list of goals that come to mind, but it's likely that they are subgoals and we are unaware of why exactly we do them. So, you keep on asking "What will this goal do for me?" instead of "What will do this goal for me?", creating downwind nodes your graph until you presumably hit your preferences.

That's interestingly dual to what I have in mind: the core notion is that it shows you one thing to do (as opposed to a list, to avoid excess choice or dismay). And if you want to not-do-that, you have choices such as:

  • “Just give me another random available item.”
  • “I can't do that because ___” (add new task as prerequisite; generalizing, this also covers such things as “because I'm not in the right location or at the right time”).
  • “I don't need to do that”, which implies that you won't do anything which depends on this task, which therefore should cause the system to ask you about the validity of those dependencies.

That last option is what sounds similar to what you're doing, but it supposes you've already entered dependency chains all the way up to preferences. Which might be another sort of one-thing the app presents you with: “Why do you want to do this thing you entered previously?” (Which information isn't mandatory, because it should still permit quick entry of simple reminders.)

Obviously this has a whole lot of scope, the extreme case becoming a complete “outboard brain” planning system, but I'm hoping that (if I ever get around to programming it) it'll be useful even in a rudimentary form.

My notion is that managing dependencies allows avoiding the problem of having a long to-do list which you have to actually look at and consciously reject items for not being something for this exact moment, thus leading to the habit of rejecting all of the items; instead, nearly all of the “list” will be filtered out by some dependency (which ends up being another task, a topic of interest (e.g. a hobby that you only do sometimes), a time, a location, etc.) and you need not ever think about it.

That's also the reason why the user interface I imagine defaults to presenting you with exactly one item at a time: each interaction you have with it gives it more data, but there is never a long list or form inviting you to deal with many items, or many fields-to-fill-out about a single item.

But, this is all vaporware.