[ Launch: d3js tree with packed canopy ] 44efba81d5f0d23df323 by DeBraid
[ Launch: d3js tree with packed canopy ] f5da4ad949005f8f894e by DeBraid
[ Launch: oaklandish VIBE ] 13457c39eb37107f83bf by DeBraid
[ Launch: oaklandish VIBE ] 4b0a56692447fa75d8a1 by enjalot
[ Launch: d3 tree by @prcweb ] 6480574 by enjalot
[ Launch: d3 tree by @prcweb ] 6472877 by enjalot
-
-
Save DeBraid/44efba81d5f0d23df323 to your computer and use it in GitHub Desktop.
Tree packed canopy at start
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{"description":"Tree packed canopy at start","endpoint":"","display":"svg","public":true,"require":[],"fileconfigs":{"inlet.js":{"default":true,"vim":false,"emacs":false,"fontSize":12},"style.css":{"default":true,"vim":false,"emacs":false,"fontSize":12},"_.md":{"default":true,"vim":false,"emacs":false,"fontSize":12},"config.json":{"default":true,"vim":false,"emacs":false,"fontSize":12}},"fullscreen":false,"play":true,"loop":false,"restart":false,"autoinit":true,"pause":true,"loop_type":"period","bv":false,"nclones":15,"clone_opacity":0.4,"duration":3000,"ease":"linear","dt":0.01,"inline-console":false,"thumbnail":"http://i.imgur.com/L2ZM6Ek.png","ajax-caching":true} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* D3 Tree http://prcweb.co.uk/lab/d3-tree/ */ | |
/* Copyright 2013 Peter Cook (@prcweb); Licensed MIT */ | |
// "data for each branch (start point, angle, length and parent) | |
// and binds this data to SVG line elements using D3." | |
// tributary.loop_type = "pingpong"; | |
var svg = d3.select("svg") | |
svg.append("rect").attr({width: "100%", height:"100%", fill: "#14103c"}) | |
// Tree configuration | |
var branches = []; | |
var seed = {i: 0, x: 285, y: 547, a: 0, l: 149, d:0}; // a = angle, l = length, d = depth | |
var da = 0.389109547008; // Angle delta | |
var dl = 0.73216; // Length delta (factor) | |
var ar = 0 // tilt of tree (neg left, pos right) | |
var maxDepth = 6; //lower this for faster rendering | |
var stroke = "#86727c"; | |
var use = [20, 58, 60, 61, 49, 6, 7, 4, 21, 22, 29, 46, 47, 54]; | |
//var use = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]; | |
// 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, | |
// var use = [12,1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 81]; | |
var pathGenerator = d3.svg.line() | |
.x(function(d) { | |
return d.x; | |
}) | |
.y(function(d) { | |
return d.y; | |
}) | |
.interpolate("linear") | |
// Tree creation functions | |
function branch(b) { | |
var end = endPt(b), | |
daR, | |
newB; | |
branches.push(b); | |
if (b.d === maxDepth) | |
return; | |
// Left branch | |
daR = ar; | |
newB = { | |
i: branches.length, | |
x: end.x, | |
y: end.y, | |
a: b.a - da + daR, | |
l: b.l * dl, | |
d: b.d + 1, | |
parent: b.i | |
}; | |
branch(newB); | |
// Right branch | |
daR = ar; | |
newB = { | |
i: branches.length, | |
x: end.x, | |
y: end.y, | |
a: b.a + da + daR, | |
l: b.l * dl, | |
d: b.d + 1, | |
parent: b.i | |
}; | |
branch(newB); | |
} | |
function regenerate(initialise) { | |
branches = []; | |
branch(seed); | |
create(); | |
} | |
function endPt(b) { | |
// Return endpoint of branch | |
var x = b.x + b.l * Math.sin( b.a ); | |
var y = b.y - b.l * Math.cos( b.a ); | |
return {x: x, y: y}; | |
} | |
// D3 functions | |
function x1(d) {return d.x;} | |
function y1(d) {return d.y;} | |
function x2(d) {return endPt(d).x;} | |
function y2(d) {return endPt(d).y;} | |
function highlightParents(d) { | |
var colour = d3.event.type === 'mouseover' ? 'green' : '#777'; | |
var depth = d.d; | |
for(var i = 0; i <= depth; i++) { | |
d3.select('#id-'+parseInt(d.i)).style('stroke', colour); | |
d = branches[d.parent]; | |
} | |
} | |
function getPoints(branches) { | |
var points = []; | |
branches.forEach(function(branch) { | |
points.push( {x: x1(branch), y: y1(branch) }); | |
points.push( {x: x2(branch), y: y2(branch) }); | |
}); | |
return points; | |
} | |
function getParent(branch, p, branches) { | |
if(!branch.parent) return; | |
var b = branches[branch.parent]; | |
p.push({x: b.x, y: b.y}) | |
getParent(b, p, branches); | |
} | |
function getPaths(branches) { | |
var paths = []; | |
var i = 0; | |
branches.forEach(function(branch) { | |
if(branch.d < maxDepth) return; | |
var p = [{x: branch.x, y: branch.y}]; | |
getParent(branch, p, branches); | |
p.push(seed); | |
paths.push(p); | |
}); | |
return paths; | |
} | |
function create() { | |
var points = getPoints(branches); | |
var pths = getPaths(branches); | |
var pruned = [] | |
var i = 0; | |
pths.forEach(function(path) { | |
i++ | |
if(use.indexOf(i) >= 0) { | |
pruned.push(path); | |
} | |
}) | |
/* | |
d3.select('svg') | |
.selectAll('line') | |
.data(branches) | |
.enter() | |
.append('line') | |
.attr({ | |
x1: x1, | |
y1: y1, | |
x2: x2, | |
y2: y2 | |
}) | |
.attr("fill", "none") | |
.attr("stroke", "#fff") | |
.attr("stroke-width", 9.32) | |
.attr(" | |
-opacity", 0.5) | |
*/ | |
var pathlines = svg | |
.selectAll('path') | |
.data(pruned); | |
pathlines | |
.enter() | |
.append('path') | |
.attr("fill", "none") | |
.attr("stroke", "#fff") | |
.attr("stroke-width", 12.32); | |
pathlines | |
.attr("d", function(d) { | |
return pathGenerator(d); | |
}) | |
.style("stroke", stroke); | |
// .style('stroke-width', function(d) {return parseInt(maxDepth + 1 - d.d) + 'px';}); | |
pathlines.exit().remove(); | |
var gees = svg.selectAll("g").data(pruned) | |
.enter().append("g"); | |
gees.append("circle") | |
.attr({ | |
cx: function(d,i) { | |
return d[0].x; | |
}, | |
cy: function(d,i) { return d[0].y;}, | |
r: 18, | |
fill: "red", | |
stroke: "#fff", | |
"stroke-width": "5px", | |
}) | |
.classed("selector", true) | |
.on("click", function(d,i) { | |
var diameter = 100, | |
format = d3.format(",d"), | |
data = getData(); | |
var pack = d3.layout.pack() | |
.size([diameter - 4, diameter - 4]) | |
.value(function(d) { return d.size; }); | |
var _this = d3.select(this), | |
_thisX = parseInt(_this.attr("cx")), | |
_thisY = parseInt(_this.attr("cy")); | |
var R = parseInt(_this.attr("r")); | |
console.log("R", R); | |
console.log("_thisX", _thisX); | |
console.log("_thisY", _thisY); | |
_this.transition().attr("r", 0); | |
var packedData = pack.nodes; | |
gees.datum(data).selectAll(".node") | |
.data(packedData) | |
.enter() | |
.append("circle") | |
.attr("stroke", "black") | |
.style("fill", function(d) { return !d.children ? "tan" : "beige"; }) | |
.attr("cx", function(d) { return d.x + _thisX - R*2 ; }) | |
.attr("cy", function(d) { return d.y + _thisY - R*2 ; }) | |
.attr("r", function(d) { | |
return d.r; | |
}); | |
function getData() { | |
return { | |
"name": "flare", | |
"children": [ | |
{ | |
"name": "analytics", | |
"children": [ | |
{ | |
"name": "cluster", | |
"children": [ | |
{"name": "AgglomerativeCluster", "size": 3938}, | |
{"name": "CommunityStructure", "size": 3812}, | |
{"name": "HierarchicalCluster", "size": 6714}, | |
{"name": "MergeEdge", "size": 743} | |
] | |
}, | |
{ | |
"name": "graph", | |
"children": [ | |
{"name": "BetweennessCentrality", "size": 3534}, | |
{"name": "LinkDistance", "size": 5731}, | |
{"name": "MaxFlowMinCut", "size": 7840}, | |
{"name": "ShortestPaths", "size": 5914}, | |
{"name": "SpanningTree", "size": 3416} | |
] | |
}, | |
{ | |
"name": "optimization", | |
"children": [ | |
{"name": "AspectRatioBanker", "size": 7074} | |
] | |
} | |
] | |
}, | |
{ | |
"name": "animate", | |
"children": [ | |
{"name": "Easing", "size": 17010}, | |
{"name": "FunctionSequence", "size": 5842}, | |
{ | |
"name": "interpolate", | |
"children": [ | |
{"name": "ArrayInterpolator", "size": 1983}, | |
{"name": "RectangleInterpolator", "size": 2042} | |
] | |
}, | |
{"name": "ISchedulable", "size": 1041}, | |
{"name": "Parallel", "size": 5176}, | |
{"name": "Pause", "size": 449}, | |
{"name": "Scheduler", "size": 5593}, | |
{"name": "Sequence", "size": 5534}, | |
{"name": "Transition", "size": 9201}, | |
{"name": "Transitioner", "size": 19975}, | |
{"name": "TransitionEvent", "size": 1116}, | |
{"name": "Tween", "size": 6006} | |
] | |
}, | |
{ | |
"name": "data", | |
"children": [ | |
{ | |
"name": "converters", | |
"children": [ | |
{"name": "Converters", "size": 721}, | |
{"name": "DelimitedTextConverter", "size": 4294}, | |
{"name": "GraphMLConverter", "size": 9800}, | |
{"name": "IDataConverter", "size": 1314}, | |
{"name": "JSONConverter", "size": 2220} | |
] | |
}, | |
{"name": "DataField", "size": 1759}, | |
{"name": "DataSchema", "size": 2165}, | |
{"name": "DataSet", "size": 586}, | |
{"name": "DataSource", "size": 3331}, | |
{"name": "DataTable", "size": 772}, | |
{"name": "DataUtil", "size": 3322} | |
] | |
}, | |
{ | |
"name": "display", | |
"children": [ | |
{"name": "DirtySprite", "size": 8833}, | |
{"name": "LineSprite", "size": 1732}, | |
{"name": "RectSprite", "size": 3623}, | |
{"name": "TextSprite", "size": 10066} | |
] | |
}, | |
{ | |
"name": "flex", | |
"children": [ | |
{"name": "FlareVis", "size": 4116} | |
] | |
}, | |
{ | |
"name": "physics", | |
"children": [ | |
{"name": "DragForce", "size": 1082}, | |
{"name": "GravityForce", "size": 1336}, | |
{"name": "IForce", "size": 319}, | |
{"name": "NBodyForce", "size": 10498}, | |
{"name": "Particle", "size": 2822}, | |
{"name": "Simulation", "size": 9983}, | |
{"name": "Spring", "size": 2213}, | |
{"name": "SpringForce", "size": 1681} | |
] | |
}, | |
{ | |
"name": "scale", | |
"children": [ | |
{"name": "IScaleMap", "size": 2105}, | |
{"name": "LinearScale", "size": 1316}, | |
{"name": "TimeScale", "size": 5833} | |
] | |
}, | |
{ | |
"name": "util", | |
"children": [ | |
{"name": "Arrays", "size": 8258}, | |
{"name": "Colors", "size": 10001}, | |
{"name": "Dates", "size": 8217}, | |
{"name": "Displays", "size": 12555}, | |
{"name": "Filter", "size": 2324}, | |
{"name": "Geometry", "size": 10993}, | |
{ | |
"name": "heap", | |
"children": [ | |
{"name": "FibonacciHeap", "size": 9354}, | |
{"name": "HeapNode", "size": 1233} | |
] | |
}, | |
{"name": "IEvaluable", "size": 335}, | |
{"name": "IPredicate", "size": 383}, | |
{"name": "IValueProxy", "size": 874}, | |
{ | |
"name": "math", | |
"children": [ | |
{"name": "DenseMatrix", "size": 3165}, | |
{"name": "IMatrix", "size": 2815}, | |
{"name": "SparseMatrix", "size": 3366} | |
] | |
}, | |
{"name": "Maths", "size": 17705}, | |
{"name": "Orientation", "size": 1486}, | |
{ | |
"name": "palette", | |
"children": [ | |
{"name": "ColorPalette", "size": 6367}, | |
{"name": "Palette", "size": 1229}, | |
{"name": "ShapePalette", "size": 2059}, | |
{"name": "SizePalette", "size": 2291} | |
] | |
}, | |
{"name": "Property", "size": 5559}, | |
{"name": "Shapes", "size": 19118}, | |
{"name": "Sort", "size": 6887}, | |
{"name": "Stats", "size": 6557}, | |
{"name": "Strings", "size": 22026} | |
] | |
}, | |
{ | |
"name": "vis", | |
"children": [ | |
{ | |
"name": "axis", | |
"children": [ | |
{"name": "Axes", "size": 1302}, | |
{"name": "Axis", "size": 24593}, | |
{"name": "AxisGridLine", "size": 652}, | |
{"name": "AxisLabel", "size": 636}, | |
{"name": "CartesianAxes", "size": 6703} | |
] | |
}, | |
{ | |
"name": "controls", | |
"children": [ | |
{"name": "SelectionControl", "size": 7862}, | |
{"name": "TooltipControl", "size": 8435} | |
] | |
}, | |
{ | |
"name": "data", | |
"children": [ | |
{"name": "Data", "size": 20544}, | |
{"name": "DataList", "size": 19788}, | |
{"name": "DataSprite", "size": 10349}, | |
{"name": "EdgeSprite", "size": 3301}, | |
{"name": "NodeSprite", "size": 19382}, | |
{ | |
"name": "render", | |
"children": [ | |
{"name": "ArrowType", "size": 698}, | |
{"name": "EdgeRenderer", "size": 5569}, | |
{"name": "IRenderer", "size": 353}, | |
{"name": "ShapeRenderer", "size": 2247} | |
] | |
}, | |
{"name": "ScaleBinding", "size": 11275}, | |
{"name": "Tree", "size": 7147}, | |
{"name": "TreeBuilder", "size": 9930} | |
] | |
}, | |
{ | |
"name": "events", | |
"children": [ | |
{"name": "DataEvent", "size": 2313}, | |
{"name": "SelectionEvent", "size": 1880}, | |
{"name": "TooltipEvent", "size": 1701}, | |
{"name": "VisualizationEvent", "size": 1117} | |
] | |
}, | |
{ | |
"name": "legend", | |
"children": [ | |
{"name": "Legend", "size": 20859}, | |
{"name": "LegendItem", "size": 4614}, | |
{"name": "LegendRange", "size": 10530} | |
] | |
}, | |
{ | |
"name": "operator", | |
"children": [ | |
{ | |
"name": "distortion", | |
"children": [ | |
{"name": "BifocalDistortion", "size": 4461}, | |
{"name": "Distortion", "size": 6314}, | |
{"name": "FisheyeDistortion", "size": 3444} | |
] | |
}, | |
{ | |
"name": "encoder", | |
"children": [ | |
{"name": "ColorEncoder", "size": 3179}, | |
{"name": "Encoder", "size": 4060}, | |
{"name": "PropertyEncoder", "size": 4138}, | |
{"name": "ShapeEncoder", "size": 1690}, | |
{"name": "SizeEncoder", "size": 1830} | |
] | |
}, | |
{ | |
"name": "filter", | |
"children": [ | |
{"name": "FisheyeTreeFilter", "size": 5219}, | |
{"name": "GraphDistanceFilter", "size": 3165}, | |
{"name": "VisibilityFilter", "size": 3509} | |
] | |
}, | |
{"name": "IOperator", "size": 1286}, | |
{ | |
"name": "label", | |
"children": [ | |
{"name": "Labeler", "size": 9956}, | |
{"name": "RadialLabeler", "size": 3899}, | |
{"name": "StackedAreaLabeler", "size": 3202} | |
] | |
}, | |
{ | |
"name": "layout", | |
"children": [ | |
{"name": "AxisLayout", "size": 6725}, | |
{"name": "BundledEdgeRouter", "size": 3727}, | |
{"name": "CircleLayout", "size": 9317}, | |
{"name": "CirclePackingLayout", "size": 12003}, | |
{"name": "DendrogramLayout", "size": 4853} | |
] | |
}, | |
{"name": "Operator", "size": 2490}, | |
{"name": "OperatorList", "size": 5248}, | |
{"name": "OperatorSequence", "size": 4190}, | |
{"name": "OperatorSwitch", "size": 2581}, | |
{"name": "SortOperator", "size": 2023} | |
] | |
}, | |
{"name": "Visualization", "size": 16540} | |
] | |
} | |
] | |
}; | |
}; | |
}); | |
} | |
regenerate(); | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment