Eeg - easy easy graph
Library to easily draw simple force directed graphs
Warning! At this stage this library is not a performance beast and with large number of nodes or graphs the CPU can go up through the roof
Installation
To install:
$ git clone https://github.com/szydan/eeg.git $ cd eeg $ npm install
Library is in ./lib. Examples are in ./test/eeg.html
Usage and API
Usage:
var eeg = new Eeg('#id', options);
Where options:
{
title: "My graph", // ( optional ) default ""
showLegend: true/false // ( optional ) default true
baseURL: '' // ( optional ) default "" - baseUrl for resources (img,css,js)
debug: true, // ( optional ) default false
forceDistance: 100, // ( optional ) default 200
forceGravity: 0.5, // ( optional ) default 0.01
groupingForce:{ // ( optional ) default - no additional force will be applied in any direction
nodeType1: {x: +8, y: +3},
nodeType1: {x: -8, y: -3}
}
minNodeSize: 10, // ( optional ) default 10
maxNodeSize: 30, // ( optional ) default 30
monitorContainerSize: true/false, // ( optional ) default false
nodeR: 10, // ( optional ) default 10
colors: { // ( optional ) if not present the d3.scale.category10() function is used to assign colors to nodes
nodeType1: "#ff0",
nodeType2: "#0f0"
},
nodeIcons: { // ( optional ) if not present the nodes are shown as colored circles
nodeType1: { // if present the nodes will be presented as the provided images, scale according to the node.size property
img: "http://placehold.it/48x48", // all images size has to be exactly 48px x 48px
type:"round|square" // there are built in ones with urls "person", "place", "organization"
},
nodeType1: {
img: "http://placehold.it/48x48",
type:"round|square"
}
},
linkColor: '#dedede', // ( optional ) default: '#dedede' - color of the graph edge
linkHoverColor : '#444', // ( optional ) default: '#444' - color of the graph edge on hover
alwaysShowLinksLabels : false, // ( optional ) default: false - flag to indicate that links labels should be shown all time, not only on hover
// if any of the callbacks is provided, some default actions might get broken
// Please check the source to see what default callbacks are doing, before providing your custom ones
onNodeUnsticky: function(){},
onNodeSticky: function(){},
onNodeDragEnd: function(){},
onNodeMouseOver: function(){},
onNodeMouseOut: function(){},
onNodeClick: function(self,d,i){},
onNodeDoubleClick:function(){},
onNodeRemove: function(self,clickedNode, node, i){},
onNodeExpand: function(self,THIS,d,i,clickedEl){ $(clickedEl).closest("div").fadeOut(); },
onNodeCollapse: function(self,THIS,d,i,clickedEl){},
onLinkMouseOver: function(){},
onLinkMouseOut: function(){},
onLinkClick: function(){},
}
To add nodes and edges to the graph use:
eeg.addNode(node)
eeg.addLink(link)
Where:
node = {
id:string, // mandatory
label:string, // mandatory
nodeType:string,// mandatory
size: integer // optional - when present all nodes will have normalized sizes where min,max -> options.minNodeSize, options.maxNodeSize
}
link = {
source:node, // mandatory
target:node, // mandatory
linkType:string, // mandatory
undirected: boolean // optional - default false, when true no arrow is draw
html: htmlElement, // optional
size: integer // optional - when present all links will have normalized thickness where min,max -> options.minLinkSize, options.maxLinkSize
onLinkClick: function(){} // optional if present will take preference over the one from options
// and will be attached only to this particular link
}
Other methods:
eeg.getOptions()
eeg.setTitle(title)
eeg.addNodes(nodes)
eeg.replaceNodes(nodes)
eeg.removeNodes(ids)
eeg.removeNode(id)
eeg.getNode(id)
eeg.getNodes()
eeg.addLinks(links)
eeg.replaceLinks(links)
eeg.removeLinks(ids)
eeg.removeLink(id)
eeg.getLink(id)
eeg.getLinks()
eeg.exportGraph()
eeg.importGraph(exportedGraph)
eeg.start()
eeg.stop()
eeg.silentlyAddNode(node)
eeg.silentlyAddLink(link)
eeg.update()
Examples
Below few examples what it can do. If you do not see a feature you are looking for below it probably is not supported
Simplest possible graph. Just single node.
Simplest graph 2 nodes 1 edge, no direction.
Labels with checkboxes.
Simplest graph 2 nodes 1 edge.
Two links in the same direction.
Two links in the oposite direction.
Three links in the same direction.
Three links in different directions.
Four links in same directions.
Five links in different directions.
Self reference - single link.
Self reference - 2 links.
Self reference - 3 links.
Star like strucure - all links out.
Star like strucure - all links in. In addition the new method "addLinks" was used.
Different node sizes.
Different link sizes.
Nodes as icons.
Fixed colors.
Add and remove nodes.
Copy the graph you want into this box.
Dynamic scaling with the container on window resize.
Dynamic scaling with the container (actively monitor container size).