swhalemwo / obvz

org-brain visualization via PyQt
70 stars 4 forks source link
concept-map emacs network-visualization

keyboard-driven concept mapping visualization in emacs + python, featuring

** Underlying idea

Throughout my studies, there were many I had to structure complex information from various sources such as articles, books, lectures or conversations. Detailed nodes of individual did not connect common bits of information. Literature tables imposed an overly rigid structure. Sketches of relationships between concepts would soon fill the paper and aggravate the addition of more recent information.

obvz is an attempt to manage these concepts relations in a more effective approach.

** Requirements

*** Connectivity obvz offers multiple possibilities to communicate between emacs and Python:

the connection type can be specified by setting =obvz-connection-type=.

** Installation:

** Start & Stop

** Usage:

It seems to me that a key aspect of data visualization in general and network visualization in particular is to focus only on the few relevant parts of the brain. Consequently, large parts of obvz involve slicing and dicing the org-brain in customizable ways.

Edge direction: I myself prefer directed edges. While hierarchical relations go from parents to children and are hence obviously directed, direction is less straightforward with friend relationships. To solve this issue and give direction to =org-brain's= friend relationships, obvz uses edge annotations. These edge annotations are created in org-brain either as bi-directional (=e=) or one-directional (=C-u e=). The role of edge annotations can be customized with =obvz-only-use-annotated-edges=.

Edge label visualization can be toggled on and off with =E= (=obvz-toggle-edge-labels=).

Node selection works via org-brain's feature of pinning nodes (=n=), which visualizes

Class nodes can be used to select nodes quickly. A class node starts with "cls_" and is intended to be parent to nodes of the same kind, such as people, places, or objects. Since class nodes are normal org-brain nodes, objects can be members (i.e. children) of multiple classes. Class nodes are intended only for node selection and are not visualized themselves when pinned.

Layout: it is possible to view the graph in a force-directed layout (named "force") or the graphviz hierarchical dot layout (named "dot") with =M-x obvz-set-layout-type=. While the dot layout is deterministic, the force-directed layout is unlikely to produce the same node positions every time. In the force-directed layout, new node positions can be generated via =R= (=M-x obvz-reposition-nodes=):

Node text: switch display of node body text on and off with =N= (=M-x obvz-switch-node-text-inclusion=). The node body text follows the same convention as in org-brain-visualize, i.e. file/entry text until next headline.

** Customization

** Export obvz is intended primarily as a digital sketch board rather than a sophisticated visualization tool. For more sophisticated visualization I recommend to export the displayed graph to dot with =M-x obvz-export=. If the quick-and-dirty visualization of obvz are considered sufficient, =M-x obvz-export= can also export the current window content to svg.

** Examples *** switching between force-directed and dot-hierarchical layout [[file:demo/layout_demo.gif]]

*** updating node positions in force-directed graph [[file:demo/reposition_demo.gif]]

*** toggling node text [[file:demo/text_inclusion_demo.gif]]

*** toggling edge labels [[file:demo/edge_labels_demo.gif]]

** Particularities/Limitation

** Future Ideas

Disclaimer: This is my first project of writing an application, as well as using Elisp and GUIs. Feedback, feature suggestions and bug reports are very welcome!