This commit is contained in:
Mike Bostock 2011-06-23 20:52:17 -07:00
Родитель 68424aeff4 779de6e93e
Коммит 7927a5739a
35 изменённых файлов: 1093 добавлений и 166 удалений

Просмотреть файл

@ -88,9 +88,12 @@ d3.svg.js: \
src/svg/svg.js \
src/svg/arc.js \
src/svg/line.js \
src/svg/line-radial.js \
src/svg/area.js \
src/svg/area-radial.js \
src/svg/chord.js \
src/svg/diagonal.js \
src/svg/diagonal-radial.js \
src/svg/mouse.js \
src/svg/touches.js \
src/svg/symbol.js
@ -113,6 +116,7 @@ d3.chart.js: \
d3.layout.js: \
src/start.js \
src/layout/layout.js \
src/layout/bundle.js \
src/layout/chord.js \
src/layout/force.js \
src/layout/partition.js \

274
d3.js поставляемый
Просмотреть файл

@ -1,4 +1,4 @@
(function(){d3 = {version: "1.21.0"}; // semver
(function(){d3 = {version: "1.22.0"}; // semver
if (!Date.now) Date.now = function() {
return +new Date;
};
@ -2145,6 +2145,11 @@ var d3_timer_frame = window.requestAnimationFrame
|| window.msRequestAnimationFrame
|| function(callback) { setTimeout(callback, 17); };
d3.scale = {};
function d3_scaleExtent(domain) {
var start = domain[0], stop = domain[domain.length - 1];
return start < stop ? [start, stop] : [stop, start];
}
function d3_scale_nice(domain, nice) {
var i0 = 0,
i1 = domain.length - 1,
@ -2219,35 +2224,12 @@ d3.scale.linear = function() {
return rescale();
};
// TODO Dates? Ugh.
function tickRange(m) {
var start = d3.min(domain),
stop = d3.max(domain),
span = stop - start,
step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)),
err = m / (span / step);
// Filter ticks to get closer to the desired count.
if (err <= .15) step *= 10;
else if (err <= .35) step *= 5;
else if (err <= .75) step *= 2;
// Round start and stop values to step interval.
return {
start: Math.ceil(start / step) * step,
stop: Math.floor(stop / step) * step + step * .5, // inclusive
step: step
};
}
scale.ticks = function(m) {
var range = tickRange(m);
return d3.range(range.start, range.stop, range.step);
return d3_scale_linearTicks(domain, m);
};
scale.tickFormat = function(m) {
var n = Math.max(0, -Math.floor(Math.log(tickRange(m).step) / Math.LN10 + .01));
return d3.format(",." + n + "f");
return d3_scale_linearTickFormat(domain, m);
};
scale.nice = function() {
@ -2258,6 +2240,14 @@ d3.scale.linear = function() {
return rescale();
};
function d3_scale_linearRebind(scale, linear) {
scale.range = d3.rebind(scale, linear.range);
scale.rangeRound = d3.rebind(scale, linear.rangeRound);
scale.interpolate = d3.rebind(scale, linear.interpolate);
scale.clamp = d3.rebind(scale, linear.clamp);
return scale;
};
function d3_scale_linearNice(dx) {
dx = Math.pow(10, Math.round(Math.log(dx) / Math.LN10) - 1);
return {
@ -2265,6 +2255,33 @@ function d3_scale_linearNice(dx) {
ceil: function(x) { return Math.ceil(x / dx) * dx; },
};
}
// TODO Dates? Ugh.
function d3_scale_linearTickRange(domain, m) {
var extent = d3_scaleExtent(domain),
span = extent[1] - extent[0],
step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)),
err = m / span * step;
// Filter ticks to get closer to the desired count.
if (err <= .15) step *= 10;
else if (err <= .35) step *= 5;
else if (err <= .75) step *= 2;
// Round start and stop values to step interval.
extent[0] = Math.ceil(extent[0] / step) * step;
extent[1] = Math.floor(extent[1] / step) * step + step * .5; // inclusive
extent[2] = step;
return extent;
}
function d3_scale_linearTicks(domain, m) {
return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));
}
function d3_scale_linearTickFormat(domain, m) {
return d3.format(",." + Math.max(0, -Math.floor(Math.log(d3_scale_linearTickRange(domain, m)[2]) / Math.LN10 + .01)) + "f");
}
function d3_scale_bilinear(domain, range, uninterpolate, interpolate) {
var u = uninterpolate(domain[0], domain[1]),
i = interpolate(range[0], range[1]);
@ -2303,30 +2320,25 @@ d3.scale.log = function() {
scale.domain = function(x) {
if (!arguments.length) return linear.domain().map(pow);
log = (x[0] || x[1]) < 0 ? d3_scale_logn : d3_scale_log;
log = x[0] < 0 ? d3_scale_logn : d3_scale_log;
pow = log.pow;
linear.domain(x.map(log));
return scale;
};
scale.range = d3.rebind(scale, linear.range);
scale.rangeRound = d3.rebind(scale, linear.rangeRound);
scale.interpolate = d3.rebind(scale, linear.interpolate);
scale.clamp = d3.rebind(scale, linear.clamp);
scale.nice = function() {
linear.domain(d3_scale_nice(linear.domain(), d3_scale_niceDefault));
return scale;
};
scale.ticks = function() {
var d = linear.domain(),
var extent = d3_scaleExtent(linear.domain()),
ticks = [];
if (d.every(isFinite)) {
var i = Math.floor(d[0]),
j = Math.ceil(d[1]),
u = pow(d[0]),
v = pow(d[1]);
if (extent.every(isFinite)) {
var i = Math.floor(extent[0]),
j = Math.ceil(extent[1]),
u = pow(extent[0]),
v = pow(extent[1]);
if (log === d3_scale_logn) {
ticks.push(pow(i));
for (; i++ < j;) for (var k = 9; k > 0; k--) ticks.push(pow(i) * k);
@ -2342,10 +2354,10 @@ d3.scale.log = function() {
};
scale.tickFormat = function() {
return function(d) { return d.toPrecision(1); };
return d3_scale_logTickFormat;
};
return scale;
return d3_scale_linearRebind(scale, linear);
};
function d3_scale_log(x) {
@ -2363,9 +2375,12 @@ d3_scale_log.pow = function(x) {
d3_scale_logn.pow = function(x) {
return -Math.pow(10, -x);
};
function d3_scale_logTickFormat(d) {
return d.toPrecision(1);
}
d3.scale.pow = function() {
var linear = d3.scale.linear(),
tick = d3.scale.linear(), // TODO better tick formatting...
exponent = 1,
powp = Number,
powb = powp;
@ -2380,20 +2395,20 @@ d3.scale.pow = function() {
scale.domain = function(x) {
if (!arguments.length) return linear.domain().map(powb);
var pow = (x[0] || x[1]) < 0 ? d3_scale_pown : d3_scale_pow;
var pow = (x[0] || x[x.length - 1]) < 0 ? d3_scale_pown : d3_scale_pow;
powp = pow(exponent);
powb = pow(1 / exponent);
linear.domain(x.map(powp));
tick.domain(x);
return scale;
};
scale.range = d3.rebind(scale, linear.range);
scale.rangeRound = d3.rebind(scale, linear.rangeRound);
scale.interpolate = d3.rebind(scale, linear.interpolate);
scale.clamp = d3.rebind(scale, linear.clamp);
scale.ticks = tick.ticks;
scale.tickFormat = tick.tickFormat;
scale.ticks = function(m) {
return d3_scale_linearTicks(scale.domain(), m);
};
scale.tickFormat = function(m) {
return d3_scale_linearTickFormat(scale.domain(), m);
};
scale.nice = function() {
return scale.domain(d3_scale_nice(scale.domain(), d3_scale_linearNice));
@ -2406,7 +2421,7 @@ d3.scale.pow = function() {
return scale.domain(domain);
};
return scale;
return d3_scale_linearRebind(scale, linear);
};
function d3_scale_pow(e) {
@ -2713,7 +2728,7 @@ function d3_svg_arcStartAngle(d) {
function d3_svg_arcEndAngle(d) {
return d.endAngle;
}
d3.svg.line = function() {
function d3_svg_line(projection) {
var x = d3_svg_lineX,
y = d3_svg_lineY,
interpolate = "linear",
@ -2721,8 +2736,7 @@ d3.svg.line = function() {
tension = .7;
function line(d) {
return d.length < 1 ? null
: "M" + interpolator(d3_svg_linePoints(this, d, x, y), tension);
return d.length < 1 ? null : "M" + interpolator(projection(d3_svg_linePoints(this, d, x, y)), tension);
}
line.x = function(v) {
@ -2750,6 +2764,10 @@ d3.svg.line = function() {
};
return line;
}
d3.svg.line = function() {
return d3_svg_line(Object);
};
// Converts the specified array of data into an array of points
@ -2796,6 +2814,7 @@ var d3_svg_lineInterpolators = {
"basis": d3_svg_lineBasis,
"basis-open": d3_svg_lineBasisOpen,
"basis-closed": d3_svg_lineBasisClosed,
"bundle": d3_svg_lineBundle,
"cardinal": d3_svg_lineCardinal,
"cardinal-open": d3_svg_lineCardinalOpen,
"cardinal-closed": d3_svg_lineCardinalClosed,
@ -3005,6 +3024,24 @@ function d3_svg_lineBasisClosed(points) {
return path.join("");
}
function d3_svg_lineBundle(points, tension) {
var n = points.length - 1,
x0 = points[0][0],
y0 = points[0][1],
dx = points[n][0] - x0,
dy = points[n][1] - y0,
i = -1,
p,
t;
while (++i <= n) {
p = points[i];
t = i / n;
p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);
p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);
}
return d3_svg_lineBasis(points);
}
// Returns the dot product of the given four-element vectors.
function d3_svg_lineDot4(a, b) {
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
@ -3110,59 +3147,122 @@ function d3_svg_lineMonotone(points) {
: points[0] +
d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));
}
d3.svg.area = function() {
var x = d3_svg_lineX,
y0 = d3_svg_areaY0,
d3.svg.line.radial = function() {
var line = d3_svg_line(d3_svg_lineRadial);
line.radius = line.x, delete line.x;
line.angle = line.y, delete line.y;
return line;
};
function d3_svg_lineRadial(points) {
var point,
i = -1,
n = points.length,
r,
a;
while (++i < n) {
point = points[i];
r = point[0];
a = point[1] + d3_svg_arcOffset;
point[0] = r * Math.cos(a);
point[1] = r * Math.sin(a);
}
return points;
}
function d3_svg_area(projection) {
var x0 = d3_svg_lineX,
x1 = d3_svg_lineX,
y0 = 0,
y1 = d3_svg_lineY,
interpolate = "linear",
interpolator = d3_svg_lineInterpolators[interpolate],
tension = .7;
// TODO horizontal / vertical / radial orientation
function area(d) {
return d.length < 1 ? null
: "M" + interpolator(d3_svg_linePoints(this, d, x, y1), tension)
+ "L" + interpolator(d3_svg_linePoints(this, d, x, y0).reverse(), tension)
+ "Z";
if (d.length < 1) return null;
var points0 = d3_svg_linePoints(this, d, x0, y0),
points1 = d3_svg_linePoints(this, d, x0 === x1 ? d3_svg_areaX(points0) : x1, y0 === y1 ? d3_svg_areaY(points0) : y1);
return "M" + interpolator(projection(points1), tension)
+ "L" + interpolator(projection(points0.reverse()), tension)
+ "Z";
}
area.x = function(v) {
if (!arguments.length) return x;
x = v;
area.x = function(x) {
if (!arguments.length) return x1;
x0 = x1 = x;
return area;
};
area.y0 = function(v) {
if (!arguments.length) return y0;
y0 = v;
area.x0 = function(x) {
if (!arguments.length) return x0;
x0 = x;
return area;
};
area.y1 = function(v) {
area.x1 = function(x) {
if (!arguments.length) return x1;
x1 = x;
return area;
};
area.y = function(y) {
if (!arguments.length) return y1;
y1 = v;
y0 = y1 = y;
return area;
};
area.interpolate = function(v) {
area.y0 = function(y) {
if (!arguments.length) return y0;
y0 = y;
return area;
};
area.y1 = function(y) {
if (!arguments.length) return y1;
y1 = y;
return area;
};
area.interpolate = function(x) {
if (!arguments.length) return interpolate;
interpolator = d3_svg_lineInterpolators[interpolate = v];
interpolator = d3_svg_lineInterpolators[interpolate = x];
return area;
};
area.tension = function(v) {
area.tension = function(x) {
if (!arguments.length) return tension;
tension = v;
tension = x;
return area;
};
return area;
}
d3.svg.area = function() {
return d3_svg_area(Object);
};
function d3_svg_areaY0() {
return 0;
function d3_svg_areaX(points) {
return function(d, i) {
return points[i][0];
};
}
function d3_svg_areaY(points) {
return function(d, i) {
return points[i][1];
};
}
d3.svg.area.radial = function() {
var area = d3_svg_area(d3_svg_lineRadial);
area.radius = area.x, delete area.x;
area.innerRadius = area.x0, delete area.x0;
area.outerRadius = area.x1, delete area.x1;
area.angle = area.y, delete area.y;
area.startAngle = area.y0, delete area.y0;
area.endAngle = area.y1, delete area.y1;
return area;
};
d3.svg.chord = function() {
var source = d3_svg_chordSource,
target = d3_svg_chordTarget,
@ -3300,6 +3400,28 @@ d3.svg.diagonal = function() {
function d3_svg_diagonalProjection(d) {
return [d.x, d.y];
}
d3.svg.diagonal.radial = function() {
var diagonal = d3.svg.diagonal(),
projection = d3_svg_diagonalProjection,
projection_ = diagonal.projection;
diagonal.projection = function(x) {
return arguments.length
? projection_(d3_svg_diagonalRadialProjection(projection = x))
: projection;
};
return diagonal;
};
function d3_svg_diagonalRadialProjection(projection) {
return function() {
var d = projection.apply(this, arguments),
r = d[0],
a = d[1] + d3_svg_arcOffset;
return [r * Math.cos(a), r * Math.sin(a)];
};
}
d3.svg.mouse = function(container) {
return d3_svg_mousePoint(container, d3.event);
};

Просмотреть файл

@ -1,4 +1,61 @@
(function(){d3.layout = {};
// Implements hierarchical edge bundling using Holten's algorithm. For each
// input link, a path is computed that travels through the tree, up the parent
// hierarchy to the least common ancestor, and then back down to the destination
// node. Each path is simply an array of nodes.
d3.layout.bundle = function() {
return function(links) {
var paths = [],
i = -1,
n = links.length;
while (++i < n) paths.push(d3_layout_bundlePath(links[i]));
return paths;
};
};
function d3_layout_bundlePath(link) {
var start = link.source,
end = link.target,
lca = d3_layout_bundleLeastCommonAncestor(start, end),
points = [start];
while (start !== lca) {
start = start.parent;
points.push(start);
}
var k = points.length;
while (end !== lca) {
points.splice(k, 0, end);
end = end.parent;
}
return points;
}
function d3_layout_bundleAncestors(node) {
var ancestors = [],
parent = node.parent;
while (parent != null) {
ancestors.push(node);
node = parent;
parent = parent.parent;
}
ancestors.push(node);
return ancestors;
}
function d3_layout_bundleLeastCommonAncestor(a, b) {
if (a === b) return a;
var aNodes = d3_layout_bundleAncestors(a),
bNodes = d3_layout_bundleAncestors(b),
aNode = aNodes.pop(),
bNode = bNodes.pop(),
sharedNode = null;
while (aNode === bNode) {
sharedNode = aNode;
aNode = aNodes.pop();
bNode = bNodes.pop();
}
return sharedNode;
}
d3.layout.chord = function() {
var chord = {},
chords,

2
d3.layout.min.js поставляемый

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

4
d3.min.js поставляемый

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -0,0 +1,48 @@
<!DOCTYPE html>
<html>
<head>
<title>Area Chart (Radial)</title>
<script type="text/javascript" src="../../d3.js"></script>
<style type="text/css">
.area {
fill: lightsteelblue;
}
.line {
fill: none;
stroke: steelblue;
stroke-width: 1.5px;
}
</style>
</head>
<body>
<script type="text/javascript">
var r = 960 / 2,
data = d3.range(361).map(function(i) { return .8 + Math.sin(i / 20 * Math.PI) / 6; });
var svg = d3.select("body").append("svg:svg")
.data([data])
.attr("width", r * 2)
.attr("height", r * 2)
.append("svg:g")
.attr("transform", "translate(" + r + "," + r + ")");
svg.append("svg:path")
.attr("class", "area")
.attr("d", d3.svg.area.radial()
.innerRadius(r / 2)
.outerRadius(function(d) { return r * d; })
.angle(function(d, i) { return i / 180 * Math.PI; }));
svg.append("svg:path")
.attr("class", "line")
.attr("d", d3.svg.line.radial()
.radius(function(d) { return r * d; })
.angle(function(d, i) { return i / 180 * Math.PI; }));
</script>
</body>
</html>

Просмотреть файл

@ -0,0 +1,9 @@
.node {
font: 10px sans-serif;
}
.link {
stroke: steelblue;
stroke-opacity: .4;
fill: none;
}

Просмотреть файл

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>Hierarchical Edge Bundling (Radial Tree)</title>
<script type="text/javascript" src="../../d3.js"></script>
<script type="text/javascript" src="../../d3.layout.js"></script>
<script type="text/javascript" src="packages.js"></script>
<link type="text/css" rel="stylesheet" href="bundle-radial.css"/>
</head>
<body>
<div id="chart"></div>
<script type="text/javascript" src="bundle-radial.js"></script>
</body>
</html>

Просмотреть файл

@ -0,0 +1,50 @@
var r = 960 / 2,
splines = [];
var cluster = d3.layout.cluster()
.size([360, r - 120])
.sort(null)
.value(function(d) { return d.size; });
var bundle = d3.layout.bundle();
var line = d3.svg.line.radial()
.interpolate("bundle")
.tension(.85)
.radius(function(d) { return d.y; })
.angle(function(d) { return d.x / 180 * Math.PI; });
var vis = d3.select("#chart").append("svg:svg")
.attr("width", r * 2)
.attr("height", r * 2)
.append("svg:g")
.attr("transform", "translate(" + r + "," + r + ")");
d3.json("flare-imports.json", function(classes) {
var nodes = cluster(packages.root(classes)),
links = packages.imports(nodes);
vis.selectAll("path.link")
.data(splines = bundle(links))
.enter().append("svg:path")
.attr("class", "link")
.attr("d", line);
vis.selectAll("g.node")
.data(nodes.filter(function(n) { return !n.children; }))
.enter().append("svg:g")
.attr("class", "node")
.attr("transform", function(d) { return "rotate(" + (d.x - 90) + ")translate(" + d.y + ")"; })
.append("svg:text")
.attr("dx", function(d) { return d.x < 180 ? 8 : -8; })
.attr("dy", ".31em")
.attr("text-anchor", function(d) { return d.x < 180 ? "start" : "end"; })
.attr("transform", function(d) { return d.x < 180 ? null : "rotate(180)"; })
.text(function(d) { return d.data.key; });
});
d3.select(window).on("mousemove", function() {
vis.selectAll("path.link")
.data(splines)
.attr("d", line.tension(Math.min(1, d3.event.clientX / 960)));
});

Просмотреть файл

@ -0,0 +1,14 @@
.cell {
border: solid 1px white;
font: 10px sans-serif;
line-height: 12px;
overflow: hidden;
position: absolute;
text-indent: 2px;
}
.link {
stroke: #000;
stroke-opacity: .5;
fill: none;
}

Просмотреть файл

@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>Hierarchical Edge Bundling (Treemap)</title>
<script type="text/javascript" src="../../d3.js"></script>
<script type="text/javascript" src="../../d3.layout.js"></script>
<script type="text/javascript" src="../../lib/colorbrewer/colorbrewer.js"></script>
<script type="text/javascript" src="packages.js"></script>
<link type="text/css" rel="stylesheet" href="bundle-treemap.css"/>
</head>
<body>
<div id="chart"></div>
<script type="text/javascript" src="bundle-treemap.js"></script>
</body>
</html>

Просмотреть файл

@ -0,0 +1,53 @@
var w = 960,
h = 500,
fill = d3.scale.ordinal().range(colorbrewer.Greys[9].slice(1, 4)),
stroke = d3.scale.linear().domain([0, 1e4]).range(["brown", "steelblue"]);
var treemap = d3.layout.treemap()
.size([w, h])
.value(function(d) { return d.size; });
var bundle = d3.layout.bundle();
var div = d3.select("#chart").append("div")
.style("position", "relative")
.style("width", w + "px")
.style("height", h + "px");
var line = d3.svg.line()
.interpolate("bundle")
.tension(.85)
.x(function(d) { return d.x + d.dx / 2; })
.y(function(d) { return d.y + d.dy / 2; });
d3.json("flare-imports.json", function(classes) {
var nodes = treemap(packages.root(classes)),
links = packages.imports(nodes);
div.selectAll("div")
.data(nodes)
.enter().append("div")
.attr("class", "cell")
.style("background", function(d) { return d.children ? fill(d.data.key) : null; })
.call(cell)
.text(function(d) { return d.children ? null : d.data.key; });
div.append("svg:svg")
.attr("width", w)
.attr("height", h)
.style("position", "absolute")
.selectAll("path.link")
.data(bundle(links))
.enter().append("svg:path")
.style("stroke", function(d) { return stroke(d[0].value); })
.attr("class", "link")
.attr("d", line);
});
function cell() {
this
.style("left", function(d) { return d.x + "px"; })
.style("top", function(d) { return d.y + "px"; })
.style("width", function(d) { return d.dx - 1 + "px"; })
.style("height", function(d) { return d.dy - 1 + "px"; });
}

Просмотреть файл

@ -0,0 +1,222 @@
[
{"name":"flare.analytics.cluster.AgglomerativeCluster","size":3938,"imports":["flare.animate.Transitioner","flare.vis.data.DataList","flare.util.math.IMatrix","flare.analytics.cluster.MergeEdge","flare.analytics.cluster.HierarchicalCluster","flare.vis.data.Data"]},
{"name":"flare.analytics.cluster.CommunityStructure","size":3812,"imports":["flare.analytics.cluster.HierarchicalCluster","flare.animate.Transitioner","flare.vis.data.DataList","flare.analytics.cluster.MergeEdge","flare.util.math.IMatrix"]},
{"name":"flare.analytics.cluster.HierarchicalCluster","size":6714,"imports":["flare.vis.data.EdgeSprite","flare.vis.data.NodeSprite","flare.vis.data.DataList","flare.vis.data.Tree","flare.util.Arrays","flare.analytics.cluster.MergeEdge","flare.util.Sort","flare.vis.operator.Operator","flare.util.Property","flare.vis.data.Data"]},
{"name":"flare.analytics.cluster.MergeEdge","size":743,"imports":[]},
{"name":"flare.analytics.graph.BetweennessCentrality","size":3534,"imports":["flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.vis.data.DataList","flare.util.Arrays","flare.vis.data.Data","flare.util.Property","flare.vis.operator.Operator"]},
{"name":"flare.analytics.graph.LinkDistance","size":5731,"imports":["flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.vis.data.EdgeSprite","flare.analytics.graph.ShortestPaths","flare.vis.data.Data","flare.util.Property","flare.vis.operator.Operator"]},
{"name":"flare.analytics.graph.MaxFlowMinCut","size":7840,"imports":["flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.vis.data.EdgeSprite","flare.vis.data.Data","flare.util.Property","flare.vis.operator.Operator"]},
{"name":"flare.analytics.graph.ShortestPaths","size":5914,"imports":["flare.vis.data.EdgeSprite","flare.vis.data.NodeSprite","flare.animate.Transitioner","flare.vis.operator.Operator","flare.util.heap.HeapNode","flare.util.heap.FibonacciHeap","flare.util.Property","flare.vis.data.Data"]},
{"name":"flare.analytics.graph.SpanningTree","size":3416,"imports":["flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.vis.operator.IOperator","flare.vis.Visualization","flare.vis.data.TreeBuilder","flare.vis.operator.Operator"]},
{"name":"flare.analytics.optimization.AspectRatioBanker","size":7074,"imports":["flare.animate.Transitioner","flare.util.Arrays","flare.vis.data.DataSprite","flare.scale.Scale","flare.vis.axis.CartesianAxes","flare.vis.Visualization","flare.util.Property","flare.vis.operator.Operator"]},
{"name":"flare.animate.Easing","size":17010,"imports":["flare.animate.Transition"]},
{"name":"flare.animate.FunctionSequence","size":5842,"imports":["flare.util.Maths","flare.animate.Transition","flare.util.Arrays","flare.animate.Sequence","flare.animate.Transitioner"]},
{"name":"flare.animate.interpolate.ArrayInterpolator","size":1983,"imports":["flare.util.Arrays","flare.animate.interpolate.Interpolator"]},
{"name":"flare.animate.interpolate.ColorInterpolator","size":2047,"imports":["flare.animate.interpolate.Interpolator"]},
{"name":"flare.animate.interpolate.DateInterpolator","size":1375,"imports":["flare.animate.interpolate.Interpolator"]},
{"name":"flare.animate.interpolate.Interpolator","size":8746,"imports":["flare.animate.interpolate.NumberInterpolator","flare.animate.interpolate.ColorInterpolator","flare.animate.interpolate.PointInterpolator","flare.animate.interpolate.ObjectInterpolator","flare.animate.interpolate.MatrixInterpolator","flare.animate.interpolate.RectangleInterpolator","flare.animate.interpolate.DateInterpolator","flare.util.Property","flare.animate.interpolate.ArrayInterpolator"]},
{"name":"flare.animate.interpolate.MatrixInterpolator","size":2202,"imports":["flare.animate.interpolate.Interpolator"]},
{"name":"flare.animate.interpolate.NumberInterpolator","size":1382,"imports":["flare.animate.interpolate.Interpolator"]},
{"name":"flare.animate.interpolate.ObjectInterpolator","size":1629,"imports":["flare.animate.interpolate.Interpolator"]},
{"name":"flare.animate.interpolate.PointInterpolator","size":1675,"imports":["flare.animate.interpolate.Interpolator"]},
{"name":"flare.animate.interpolate.RectangleInterpolator","size":2042,"imports":["flare.animate.interpolate.Interpolator"]},
{"name":"flare.animate.ISchedulable","size":1041,"imports":["flare.animate.Scheduler"]},
{"name":"flare.animate.Parallel","size":5176,"imports":["flare.animate.Easing","flare.animate.Transition","flare.util.Arrays"]},
{"name":"flare.animate.Pause","size":449,"imports":["flare.animate.Transition"]},
{"name":"flare.animate.Scheduler","size":5593,"imports":["flare.animate.ISchedulable","flare.animate.Pause","flare.animate.Transition"]},
{"name":"flare.animate.Sequence","size":5534,"imports":["flare.animate.Easing","flare.util.Maths","flare.animate.Transition","flare.util.Arrays"]},
{"name":"flare.animate.Transition","size":9201,"imports":["flare.animate.Transitioner","flare.animate.TransitionEvent","flare.animate.Scheduler","flare.animate.Pause","flare.animate.Parallel","flare.animate.Easing","flare.animate.Sequence","flare.animate.ISchedulable","flare.util.Maths","flare.animate.Tween"]},
{"name":"flare.animate.Transitioner","size":19975,"imports":["flare.util.IValueProxy","flare.animate.Parallel","flare.animate.Easing","flare.animate.Sequence","flare.animate.Transition","flare.animate.Tween","flare.util.Property"]},
{"name":"flare.animate.TransitionEvent","size":1116,"imports":["flare.animate.Transition"]},
{"name":"flare.animate.Tween","size":6006,"imports":["flare.animate.Transitioner","flare.animate.Transition","flare.animate.interpolate.Interpolator","flare.util.Property"]},
{"name":"flare.data.converters.Converters","size":721,"imports":["flare.data.converters.IDataConverter","flare.data.converters.GraphMLConverter","flare.data.converters.JSONConverter","flare.data.converters.DelimitedTextConverter"]},
{"name":"flare.data.converters.DelimitedTextConverter","size":4294,"imports":["flare.data.DataSet","flare.data.DataUtil","flare.data.DataTable","flare.data.converters.IDataConverter","flare.data.DataSchema","flare.data.DataField"]},
{"name":"flare.data.converters.GraphMLConverter","size":9800,"imports":["flare.data.DataSet","flare.data.DataUtil","flare.data.DataTable","flare.data.converters.IDataConverter","flare.data.DataSchema","flare.data.DataField"]},
{"name":"flare.data.converters.IDataConverter","size":1314,"imports":["flare.data.DataSet","flare.data.DataSchema"]},
{"name":"flare.data.converters.JSONConverter","size":2220,"imports":["flare.data.DataSet","flare.data.DataUtil","flare.data.DataTable","flare.data.converters.IDataConverter","flare.data.DataSchema","flare.data.DataField","flare.util.Property"]},
{"name":"flare.data.DataField","size":1759,"imports":["flare.data.DataUtil"]},
{"name":"flare.data.DataSchema","size":2165,"imports":["flare.data.DataField","flare.util.Arrays"]},
{"name":"flare.data.DataSet","size":586,"imports":["flare.data.DataTable"]},
{"name":"flare.data.DataSource","size":3331,"imports":["flare.data.converters.IDataConverter","flare.data.converters.Converters","flare.data.DataSchema"]},
{"name":"flare.data.DataTable","size":772,"imports":["flare.data.DataSchema"]},
{"name":"flare.data.DataUtil","size":3322,"imports":["flare.data.DataField","flare.data.DataSchema"]},
{"name":"flare.display.DirtySprite","size":8833,"imports":[]},
{"name":"flare.display.LineSprite","size":1732,"imports":["flare.display.DirtySprite"]},
{"name":"flare.display.RectSprite","size":3623,"imports":["flare.util.Colors","flare.display.DirtySprite"]},
{"name":"flare.display.TextSprite","size":10066,"imports":["flare.display.DirtySprite"]},
{"name":"flare.flex.FlareVis","size":4116,"imports":["flare.display.DirtySprite","flare.data.DataSet","flare.vis.Visualization","flare.vis.axis.CartesianAxes","flare.vis.axis.Axes","flare.vis.data.Data"]},
{"name":"flare.physics.DragForce","size":1082,"imports":["flare.physics.Simulation","flare.physics.Particle","flare.physics.IForce"]},
{"name":"flare.physics.GravityForce","size":1336,"imports":["flare.physics.Simulation","flare.physics.Particle","flare.physics.IForce"]},
{"name":"flare.physics.IForce","size":319,"imports":["flare.physics.Simulation"]},
{"name":"flare.physics.NBodyForce","size":10498,"imports":["flare.physics.Simulation","flare.physics.Particle","flare.physics.IForce"]},
{"name":"flare.physics.Particle","size":2822,"imports":[]},
{"name":"flare.physics.Simulation","size":9983,"imports":["flare.physics.Particle","flare.physics.NBodyForce","flare.physics.DragForce","flare.physics.GravityForce","flare.physics.Spring","flare.physics.SpringForce","flare.physics.IForce"]},
{"name":"flare.physics.Spring","size":2213,"imports":["flare.physics.Particle"]},
{"name":"flare.physics.SpringForce","size":1681,"imports":["flare.physics.Simulation","flare.physics.Particle","flare.physics.Spring","flare.physics.IForce"]},
{"name":"flare.query.AggregateExpression","size":1616,"imports":["flare.query.Expression"]},
{"name":"flare.query.And","size":1027,"imports":["flare.query.CompositeExpression","flare.query.Expression"]},
{"name":"flare.query.Arithmetic","size":3891,"imports":["flare.query.BinaryExpression","flare.query.Expression"]},
{"name":"flare.query.Average","size":891,"imports":["flare.query.Expression","flare.query.AggregateExpression"]},
{"name":"flare.query.BinaryExpression","size":2893,"imports":["flare.query.Expression"]},
{"name":"flare.query.Comparison","size":5103,"imports":["flare.query.Not","flare.query.BinaryExpression","flare.query.Expression","flare.query.Or"]},
{"name":"flare.query.CompositeExpression","size":3677,"imports":["flare.query.Expression","flare.query.If"]},
{"name":"flare.query.Count","size":781,"imports":["flare.query.Expression","flare.query.AggregateExpression"]},
{"name":"flare.query.DateUtil","size":4141,"imports":["flare.query.Fn"]},
{"name":"flare.query.Distinct","size":933,"imports":["flare.query.Expression","flare.query.AggregateExpression"]},
{"name":"flare.query.Expression","size":5130,"imports":["flare.query.Variable","flare.query.IsA","flare.query.ExpressionIterator","flare.util.IPredicate","flare.query.Literal","flare.util.IEvaluable","flare.query.If"]},
{"name":"flare.query.ExpressionIterator","size":3617,"imports":["flare.query.Expression"]},
{"name":"flare.query.Fn","size":3240,"imports":["flare.query.DateUtil","flare.query.CompositeExpression","flare.query.Expression","flare.query.StringUtil"]},
{"name":"flare.query.If","size":2732,"imports":["flare.query.Expression"]},
{"name":"flare.query.IsA","size":2039,"imports":["flare.query.Expression","flare.query.If"]},
{"name":"flare.query.Literal","size":1214,"imports":["flare.query.Expression"]},
{"name":"flare.query.Match","size":3748,"imports":["flare.query.BinaryExpression","flare.query.Expression","flare.query.StringUtil"]},
{"name":"flare.query.Maximum","size":843,"imports":["flare.query.Expression","flare.query.AggregateExpression"]},
{"name":"flare.query.methods.add","size":593,"imports":["flare.query.methods.or","flare.query.Arithmetic"]},
{"name":"flare.query.methods.and","size":330,"imports":["flare.query.And","flare.query.methods.or"]},
{"name":"flare.query.methods.average","size":287,"imports":["flare.query.Average","flare.query.methods.or"]},
{"name":"flare.query.methods.count","size":277,"imports":["flare.query.Count","flare.query.methods.or"]},
{"name":"flare.query.methods.distinct","size":292,"imports":["flare.query.Distinct","flare.query.methods.or"]},
{"name":"flare.query.methods.div","size":595,"imports":["flare.query.methods.or","flare.query.Arithmetic"]},
{"name":"flare.query.methods.eq","size":594,"imports":["flare.query.Comparison","flare.query.methods.or"]},
{"name":"flare.query.methods.fn","size":460,"imports":["flare.query.methods.or","flare.query.Fn"]},
{"name":"flare.query.methods.gt","size":603,"imports":["flare.query.Comparison","flare.query.methods.or"]},
{"name":"flare.query.methods.gte","size":625,"imports":["flare.query.Comparison","flare.query.methods.gt","flare.query.methods.eq","flare.query.methods.or"]},
{"name":"flare.query.methods.iff","size":748,"imports":["flare.query.methods.or","flare.query.If"]},
{"name":"flare.query.methods.isa","size":461,"imports":["flare.query.IsA","flare.query.methods.or"]},
{"name":"flare.query.methods.lt","size":597,"imports":["flare.query.Comparison","flare.query.methods.or"]},
{"name":"flare.query.methods.lte","size":619,"imports":["flare.query.Comparison","flare.query.methods.lt","flare.query.methods.eq","flare.query.methods.or"]},
{"name":"flare.query.methods.max","size":283,"imports":["flare.query.Maximum","flare.query.methods.or"]},
{"name":"flare.query.methods.min","size":283,"imports":["flare.query.Minimum","flare.query.methods.or"]},
{"name":"flare.query.methods.mod","size":591,"imports":["flare.query.methods.or","flare.query.Arithmetic"]},
{"name":"flare.query.methods.mul","size":603,"imports":["flare.query.methods.lt","flare.query.methods.or","flare.query.Arithmetic"]},
{"name":"flare.query.methods.neq","size":599,"imports":["flare.query.Comparison","flare.query.methods.eq","flare.query.methods.or"]},
{"name":"flare.query.methods.not","size":386,"imports":["flare.query.Not","flare.query.methods.or"]},
{"name":"flare.query.methods.or","size":323,"imports":["flare.query.Or"]},
{"name":"flare.query.methods.orderby","size":307,"imports":["flare.query.Query","flare.query.methods.or"]},
{"name":"flare.query.methods.range","size":772,"imports":["flare.query.methods.max","flare.query.Range","flare.query.methods.or","flare.query.methods.min"]},
{"name":"flare.query.methods.select","size":296,"imports":["flare.query.Query"]},
{"name":"flare.query.methods.stddev","size":363,"imports":["flare.query.methods.and","flare.query.Variance","flare.query.methods.or"]},
{"name":"flare.query.methods.sub","size":600,"imports":["flare.query.methods.or","flare.query.Arithmetic"]},
{"name":"flare.query.methods.sum","size":280,"imports":["flare.query.Sum","flare.query.methods.or"]},
{"name":"flare.query.methods.update","size":307,"imports":["flare.query.Query"]},
{"name":"flare.query.methods.variance","size":335,"imports":["flare.query.Variance","flare.query.methods.or"]},
{"name":"flare.query.methods.where","size":299,"imports":["flare.query.Query","flare.query.methods.lt","flare.query.methods.lte"]},
{"name":"flare.query.methods.xor","size":354,"imports":["flare.query.Xor","flare.query.methods.or"]},
{"name":"flare.query.methods._","size":264,"imports":["flare.query.Literal","flare.query.methods.or"]},
{"name":"flare.query.Minimum","size":843,"imports":["flare.query.Expression","flare.query.AggregateExpression"]},
{"name":"flare.query.Not","size":1554,"imports":["flare.query.Expression"]},
{"name":"flare.query.Or","size":970,"imports":["flare.query.CompositeExpression","flare.query.Expression"]},
{"name":"flare.query.Query","size":13896,"imports":["flare.query.Variable","flare.query.Sum","flare.query.Expression","flare.util.Sort","flare.query.Not","flare.query.AggregateExpression","flare.query.Literal","flare.util.Filter","flare.util.Property","flare.query.If"]},
{"name":"flare.query.Range","size":1594,"imports":["flare.query.And","flare.query.Comparison","flare.query.Expression"]},
{"name":"flare.query.StringUtil","size":4130,"imports":["flare.query.Fn"]},
{"name":"flare.query.Sum","size":791,"imports":["flare.query.Expression","flare.query.AggregateExpression"]},
{"name":"flare.query.Variable","size":1124,"imports":["flare.query.Expression","flare.util.Property"]},
{"name":"flare.query.Variance","size":1876,"imports":["flare.query.Expression","flare.query.AggregateExpression"]},
{"name":"flare.query.Xor","size":1101,"imports":["flare.query.CompositeExpression","flare.query.Expression"]},
{"name":"flare.scale.IScaleMap","size":2105,"imports":["flare.scale.Scale"]},
{"name":"flare.scale.LinearScale","size":1316,"imports":["flare.util.Maths","flare.util.Strings","flare.scale.Scale","flare.scale.QuantitativeScale","flare.scale.ScaleType"]},
{"name":"flare.scale.LogScale","size":3151,"imports":["flare.util.Maths","flare.util.Strings","flare.scale.Scale","flare.scale.QuantitativeScale","flare.scale.ScaleType"]},
{"name":"flare.scale.OrdinalScale","size":3770,"imports":["flare.scale.ScaleType","flare.util.Arrays","flare.scale.Scale"]},
{"name":"flare.scale.QuantileScale","size":2435,"imports":["flare.util.Maths","flare.util.Strings","flare.scale.Scale","flare.scale.ScaleType"]},
{"name":"flare.scale.QuantitativeScale","size":4839,"imports":["flare.util.Maths","flare.util.Strings","flare.scale.Scale"]},
{"name":"flare.scale.RootScale","size":1756,"imports":["flare.util.Maths","flare.util.Strings","flare.scale.Scale","flare.scale.QuantitativeScale","flare.scale.ScaleType"]},
{"name":"flare.scale.Scale","size":4268,"imports":["flare.scale.ScaleType","flare.util.Strings"]},
{"name":"flare.scale.ScaleType","size":1821,"imports":["flare.scale.Scale"]},
{"name":"flare.scale.TimeScale","size":5833,"imports":["flare.util.Maths","flare.util.Dates","flare.scale.Scale","flare.scale.ScaleType"]},
{"name":"flare.util.Arrays","size":8258,"imports":["flare.util.IValueProxy","flare.util.Property","flare.util.IEvaluable"]},
{"name":"flare.util.Colors","size":10001,"imports":["flare.util.Filter"]},
{"name":"flare.util.Dates","size":8217,"imports":["flare.util.Maths"]},
{"name":"flare.util.Displays","size":12555,"imports":["flare.util.IValueProxy","flare.util.Filter","flare.util.Property","flare.util.IEvaluable","flare.util.Sort"]},
{"name":"flare.util.Filter","size":2324,"imports":["flare.util.IPredicate","flare.util.Property"]},
{"name":"flare.util.Geometry","size":10993,"imports":[]},
{"name":"flare.util.heap.FibonacciHeap","size":9354,"imports":["flare.util.heap.HeapNode"]},
{"name":"flare.util.heap.HeapNode","size":1233,"imports":["flare.util.heap.FibonacciHeap"]},
{"name":"flare.util.IEvaluable","size":335,"imports":[]},
{"name":"flare.util.IPredicate","size":383,"imports":[]},
{"name":"flare.util.IValueProxy","size":874,"imports":[]},
{"name":"flare.util.math.DenseMatrix","size":3165,"imports":["flare.util.math.IMatrix"]},
{"name":"flare.util.math.IMatrix","size":2815,"imports":[]},
{"name":"flare.util.math.SparseMatrix","size":3366,"imports":["flare.util.math.IMatrix"]},
{"name":"flare.util.Maths","size":17705,"imports":["flare.util.Arrays"]},
{"name":"flare.util.Orientation","size":1486,"imports":[]},
{"name":"flare.util.palette.ColorPalette","size":6367,"imports":["flare.util.palette.Palette","flare.util.Colors"]},
{"name":"flare.util.palette.Palette","size":1229,"imports":[]},
{"name":"flare.util.palette.ShapePalette","size":2059,"imports":["flare.util.palette.Palette","flare.util.Shapes"]},
{"name":"flare.util.palette.SizePalette","size":2291,"imports":["flare.util.palette.Palette"]},
{"name":"flare.util.Property","size":5559,"imports":["flare.util.IPredicate","flare.util.IValueProxy","flare.util.IEvaluable"]},
{"name":"flare.util.Shapes","size":19118,"imports":["flare.util.Arrays"]},
{"name":"flare.util.Sort","size":6887,"imports":["flare.util.Arrays","flare.util.Property"]},
{"name":"flare.util.Stats","size":6557,"imports":["flare.util.Arrays","flare.util.Property"]},
{"name":"flare.util.Strings","size":22026,"imports":["flare.util.Dates","flare.util.Property"]},
{"name":"flare.vis.axis.Axes","size":1302,"imports":["flare.animate.Transitioner","flare.vis.Visualization"]},
{"name":"flare.vis.axis.Axis","size":24593,"imports":["flare.animate.Transitioner","flare.scale.LinearScale","flare.util.Arrays","flare.scale.ScaleType","flare.util.Strings","flare.display.TextSprite","flare.scale.Scale","flare.util.Stats","flare.scale.IScaleMap","flare.vis.axis.AxisLabel","flare.vis.axis.AxisGridLine"]},
{"name":"flare.vis.axis.AxisGridLine","size":652,"imports":["flare.vis.axis.Axis","flare.display.LineSprite"]},
{"name":"flare.vis.axis.AxisLabel","size":636,"imports":["flare.vis.axis.Axis","flare.display.TextSprite"]},
{"name":"flare.vis.axis.CartesianAxes","size":6703,"imports":["flare.animate.Transitioner","flare.display.RectSprite","flare.vis.axis.Axis","flare.display.TextSprite","flare.vis.axis.Axes","flare.vis.Visualization","flare.vis.axis.AxisGridLine"]},
{"name":"flare.vis.controls.AnchorControl","size":2138,"imports":["flare.vis.controls.Control","flare.vis.Visualization","flare.vis.operator.layout.Layout"]},
{"name":"flare.vis.controls.ClickControl","size":3824,"imports":["flare.vis.events.SelectionEvent","flare.vis.controls.Control"]},
{"name":"flare.vis.controls.Control","size":1353,"imports":["flare.vis.controls.IControl","flare.util.Filter"]},
{"name":"flare.vis.controls.ControlList","size":4665,"imports":["flare.vis.controls.IControl","flare.util.Arrays","flare.vis.Visualization","flare.vis.controls.Control"]},
{"name":"flare.vis.controls.DragControl","size":2649,"imports":["flare.vis.controls.Control","flare.vis.data.DataSprite"]},
{"name":"flare.vis.controls.ExpandControl","size":2832,"imports":["flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.vis.controls.Control","flare.vis.Visualization"]},
{"name":"flare.vis.controls.HoverControl","size":4896,"imports":["flare.vis.events.SelectionEvent","flare.vis.controls.Control"]},
{"name":"flare.vis.controls.IControl","size":763,"imports":["flare.vis.controls.Control"]},
{"name":"flare.vis.controls.PanZoomControl","size":5222,"imports":["flare.util.Displays","flare.vis.controls.Control"]},
{"name":"flare.vis.controls.SelectionControl","size":7862,"imports":["flare.vis.events.SelectionEvent","flare.vis.controls.Control"]},
{"name":"flare.vis.controls.TooltipControl","size":8435,"imports":["flare.animate.Tween","flare.display.TextSprite","flare.vis.controls.Control","flare.vis.events.TooltipEvent"]},
{"name":"flare.vis.data.Data","size":20544,"imports":["flare.vis.data.EdgeSprite","flare.vis.data.NodeSprite","flare.util.Arrays","flare.vis.data.DataSprite","flare.vis.data.Tree","flare.vis.events.DataEvent","flare.data.DataSet","flare.vis.data.TreeBuilder","flare.vis.data.DataList","flare.data.DataSchema","flare.util.Sort","flare.data.DataField","flare.util.Property"]},
{"name":"flare.vis.data.DataList","size":19788,"imports":["flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.util.Arrays","flare.util.math.DenseMatrix","flare.vis.data.DataSprite","flare.vis.data.EdgeSprite","flare.vis.events.DataEvent","flare.util.Stats","flare.util.math.IMatrix","flare.util.Sort","flare.util.Filter","flare.util.Property","flare.util.IEvaluable","flare.vis.data.Data"]},
{"name":"flare.vis.data.DataSprite","size":10349,"imports":["flare.util.Colors","flare.vis.data.Data","flare.display.DirtySprite","flare.vis.data.render.IRenderer","flare.vis.data.render.ShapeRenderer"]},
{"name":"flare.vis.data.EdgeSprite","size":3301,"imports":["flare.vis.data.render.EdgeRenderer","flare.vis.data.DataSprite","flare.vis.data.NodeSprite","flare.vis.data.render.ArrowType","flare.vis.data.Data"]},
{"name":"flare.vis.data.NodeSprite","size":19382,"imports":["flare.animate.Transitioner","flare.util.Arrays","flare.vis.data.DataSprite","flare.vis.data.EdgeSprite","flare.vis.data.Tree","flare.util.Sort","flare.util.Filter","flare.util.IEvaluable","flare.vis.data.Data"]},
{"name":"flare.vis.data.render.ArrowType","size":698,"imports":[]},
{"name":"flare.vis.data.render.EdgeRenderer","size":5569,"imports":["flare.vis.data.EdgeSprite","flare.vis.data.NodeSprite","flare.vis.data.DataSprite","flare.vis.data.render.IRenderer","flare.util.Shapes","flare.util.Geometry","flare.vis.data.render.ArrowType"]},
{"name":"flare.vis.data.render.IRenderer","size":353,"imports":["flare.vis.data.DataSprite"]},
{"name":"flare.vis.data.render.ShapeRenderer","size":2247,"imports":["flare.util.Shapes","flare.vis.data.render.IRenderer","flare.vis.data.DataSprite"]},
{"name":"flare.vis.data.ScaleBinding","size":11275,"imports":["flare.scale.TimeScale","flare.scale.ScaleType","flare.scale.LinearScale","flare.scale.LogScale","flare.scale.OrdinalScale","flare.scale.RootScale","flare.scale.Scale","flare.scale.QuantileScale","flare.util.Stats","flare.scale.QuantitativeScale","flare.vis.events.DataEvent","flare.vis.data.Data"]},
{"name":"flare.vis.data.Tree","size":7147,"imports":["flare.vis.data.EdgeSprite","flare.vis.events.DataEvent","flare.vis.data.NodeSprite","flare.vis.data.Data"]},
{"name":"flare.vis.data.TreeBuilder","size":9930,"imports":["flare.vis.data.EdgeSprite","flare.vis.data.NodeSprite","flare.vis.data.Tree","flare.util.heap.HeapNode","flare.util.heap.FibonacciHeap","flare.util.Property","flare.util.IEvaluable","flare.vis.data.Data"]},
{"name":"flare.vis.events.DataEvent","size":2313,"imports":["flare.vis.data.EdgeSprite","flare.vis.data.NodeSprite","flare.vis.data.DataList","flare.vis.data.DataSprite"]},
{"name":"flare.vis.events.SelectionEvent","size":1880,"imports":["flare.vis.events.DataEvent"]},
{"name":"flare.vis.events.TooltipEvent","size":1701,"imports":["flare.vis.data.EdgeSprite","flare.vis.data.NodeSprite"]},
{"name":"flare.vis.events.VisualizationEvent","size":1117,"imports":["flare.animate.Transitioner"]},
{"name":"flare.vis.legend.Legend","size":20859,"imports":["flare.animate.Transitioner","flare.vis.data.ScaleBinding","flare.util.palette.SizePalette","flare.scale.ScaleType","flare.vis.legend.LegendItem","flare.display.RectSprite","flare.display.TextSprite","flare.scale.Scale","flare.vis.legend.LegendRange","flare.util.Displays","flare.util.Orientation","flare.util.palette.ShapePalette","flare.util.palette.Palette","flare.util.palette.ColorPalette"]},
{"name":"flare.vis.legend.LegendItem","size":4614,"imports":["flare.util.Shapes","flare.display.TextSprite","flare.vis.legend.Legend","flare.display.RectSprite"]},
{"name":"flare.vis.legend.LegendRange","size":10530,"imports":["flare.util.Colors","flare.vis.legend.Legend","flare.display.RectSprite","flare.display.TextSprite","flare.scale.Scale","flare.util.Stats","flare.scale.IScaleMap","flare.util.Orientation","flare.util.palette.ColorPalette"]},
{"name":"flare.vis.operator.distortion.BifocalDistortion","size":4461,"imports":["flare.vis.operator.distortion.Distortion"]},
{"name":"flare.vis.operator.distortion.Distortion","size":6314,"imports":["flare.animate.Transitioner","flare.vis.data.DataSprite","flare.vis.events.VisualizationEvent","flare.vis.axis.Axis","flare.vis.axis.CartesianAxes","flare.vis.operator.layout.Layout","flare.vis.data.Data"]},
{"name":"flare.vis.operator.distortion.FisheyeDistortion","size":3444,"imports":["flare.vis.operator.distortion.Distortion"]},
{"name":"flare.vis.operator.encoder.ColorEncoder","size":3179,"imports":["flare.animate.Transitioner","flare.scale.ScaleType","flare.vis.operator.encoder.Encoder","flare.util.palette.Palette","flare.util.palette.ColorPalette","flare.vis.data.Data"]},
{"name":"flare.vis.operator.encoder.Encoder","size":4060,"imports":["flare.animate.Transitioner","flare.vis.data.DataSprite","flare.vis.operator.Operator","flare.vis.data.ScaleBinding","flare.util.palette.Palette","flare.util.Filter","flare.util.Property","flare.vis.data.Data"]},
{"name":"flare.vis.operator.encoder.PropertyEncoder","size":4138,"imports":["flare.animate.Transitioner","flare.vis.data.DataList","flare.vis.data.Data","flare.vis.operator.encoder.Encoder","flare.util.Filter","flare.vis.operator.Operator"]},
{"name":"flare.vis.operator.encoder.ShapeEncoder","size":1690,"imports":["flare.util.palette.Palette","flare.scale.ScaleType","flare.util.palette.ShapePalette","flare.vis.operator.encoder.Encoder","flare.vis.data.Data"]},
{"name":"flare.vis.operator.encoder.SizeEncoder","size":1830,"imports":["flare.util.palette.Palette","flare.scale.ScaleType","flare.vis.operator.encoder.Encoder","flare.util.palette.SizePalette","flare.vis.data.Data"]},
{"name":"flare.vis.operator.filter.FisheyeTreeFilter","size":5219,"imports":["flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.vis.data.DataSprite","flare.vis.data.EdgeSprite","flare.vis.data.Tree","flare.vis.operator.Operator","flare.vis.data.Data"]},
{"name":"flare.vis.operator.filter.GraphDistanceFilter","size":3165,"imports":["flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.vis.operator.Operator","flare.vis.data.DataSprite","flare.vis.data.EdgeSprite"]},
{"name":"flare.vis.operator.filter.VisibilityFilter","size":3509,"imports":["flare.vis.operator.Operator","flare.animate.Transitioner","flare.util.Filter","flare.vis.data.DataSprite","flare.vis.data.Data"]},
{"name":"flare.vis.operator.IOperator","size":1286,"imports":["flare.animate.Transitioner","flare.vis.Visualization","flare.vis.operator.Operator"]},
{"name":"flare.vis.operator.label.Labeler","size":9956,"imports":["flare.animate.Transitioner","flare.vis.data.DataSprite","flare.display.TextSprite","flare.vis.operator.Operator","flare.util.Shapes","flare.util.Filter","flare.util.Property","flare.util.IEvaluable","flare.vis.data.Data"]},
{"name":"flare.vis.operator.label.RadialLabeler","size":3899,"imports":["flare.vis.operator.label.Labeler","flare.util.Shapes","flare.display.TextSprite","flare.vis.data.DataSprite","flare.vis.data.Data"]},
{"name":"flare.vis.operator.label.StackedAreaLabeler","size":3202,"imports":["flare.vis.operator.label.Labeler","flare.display.TextSprite","flare.vis.data.DataSprite","flare.vis.data.Data"]},
{"name":"flare.vis.operator.layout.AxisLayout","size":6725,"imports":["flare.scale.ScaleType","flare.vis.data.DataSprite","flare.vis.axis.CartesianAxes","flare.vis.data.ScaleBinding","flare.util.Property","flare.vis.operator.layout.Layout","flare.vis.data.Data"]},
{"name":"flare.vis.operator.layout.BundledEdgeRouter","size":3727,"imports":["flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.util.Arrays","flare.vis.data.DataSprite","flare.vis.data.EdgeSprite","flare.util.Shapes","flare.vis.operator.layout.Layout","flare.vis.operator.Operator"]},
{"name":"flare.vis.operator.layout.CircleLayout","size":9317,"imports":["flare.vis.data.NodeSprite","flare.vis.data.DataList","flare.vis.data.ScaleBinding","flare.util.Property","flare.vis.operator.layout.Layout","flare.vis.data.Data"]},
{"name":"flare.vis.operator.layout.CirclePackingLayout","size":12003,"imports":["flare.vis.data.NodeSprite","flare.vis.data.render.ShapeRenderer","flare.util.Shapes","flare.util.Sort","flare.vis.operator.layout.Layout","flare.vis.data.Data"]},
{"name":"flare.vis.operator.layout.DendrogramLayout","size":4853,"imports":["flare.util.Property","flare.vis.data.NodeSprite","flare.util.Orientation","flare.vis.operator.layout.Layout","flare.vis.data.EdgeSprite"]},
{"name":"flare.vis.operator.layout.ForceDirectedLayout","size":8411,"imports":["flare.physics.Simulation","flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.vis.data.DataSprite","flare.physics.Particle","flare.physics.Spring","flare.vis.operator.layout.Layout","flare.vis.data.EdgeSprite","flare.vis.data.Data"]},
{"name":"flare.vis.operator.layout.IcicleTreeLayout","size":4864,"imports":["flare.vis.data.NodeSprite","flare.util.Orientation","flare.vis.operator.layout.Layout"]},
{"name":"flare.vis.operator.layout.IndentedTreeLayout","size":3174,"imports":["flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.util.Arrays","flare.vis.operator.layout.Layout","flare.vis.data.EdgeSprite"]},
{"name":"flare.vis.operator.layout.Layout","size":7881,"imports":["flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.vis.data.DataList","flare.vis.data.DataSprite","flare.vis.data.EdgeSprite","flare.vis.Visualization","flare.vis.axis.CartesianAxes","flare.vis.axis.Axes","flare.animate.TransitionEvent","flare.vis.operator.Operator"]},
{"name":"flare.vis.operator.layout.NodeLinkTreeLayout","size":12870,"imports":["flare.vis.data.NodeSprite","flare.util.Arrays","flare.util.Orientation","flare.vis.operator.layout.Layout"]},
{"name":"flare.vis.operator.layout.PieLayout","size":2728,"imports":["flare.vis.data.DataList","flare.vis.data.DataSprite","flare.util.Shapes","flare.util.Property","flare.vis.operator.layout.Layout","flare.vis.data.Data"]},
{"name":"flare.vis.operator.layout.RadialTreeLayout","size":12348,"imports":["flare.vis.data.NodeSprite","flare.util.Arrays","flare.vis.operator.layout.Layout"]},
{"name":"flare.vis.operator.layout.RandomLayout","size":870,"imports":["flare.vis.operator.layout.Layout","flare.vis.data.DataSprite","flare.vis.data.Data"]},
{"name":"flare.vis.operator.layout.StackedAreaLayout","size":9121,"imports":["flare.scale.TimeScale","flare.scale.LinearScale","flare.util.Arrays","flare.scale.OrdinalScale","flare.vis.data.NodeSprite","flare.scale.Scale","flare.vis.axis.CartesianAxes","flare.util.Stats","flare.util.Orientation","flare.scale.QuantitativeScale","flare.util.Maths","flare.vis.operator.layout.Layout"]},
{"name":"flare.vis.operator.layout.TreeMapLayout","size":9191,"imports":["flare.animate.Transitioner","flare.vis.data.NodeSprite","flare.util.Property","flare.vis.operator.layout.Layout"]},
{"name":"flare.vis.operator.Operator","size":2490,"imports":["flare.animate.Transitioner","flare.vis.operator.IOperator","flare.util.Property","flare.util.IEvaluable","flare.vis.Visualization"]},
{"name":"flare.vis.operator.OperatorList","size":5248,"imports":["flare.animate.Transitioner","flare.util.Arrays","flare.vis.operator.IOperator","flare.vis.Visualization","flare.vis.operator.Operator"]},
{"name":"flare.vis.operator.OperatorSequence","size":4190,"imports":["flare.animate.Transitioner","flare.util.Arrays","flare.vis.operator.IOperator","flare.vis.operator.OperatorList","flare.animate.FunctionSequence","flare.vis.operator.Operator"]},
{"name":"flare.vis.operator.OperatorSwitch","size":2581,"imports":["flare.animate.Transitioner","flare.vis.operator.OperatorList","flare.vis.operator.IOperator","flare.vis.operator.Operator"]},
{"name":"flare.vis.operator.SortOperator","size":2023,"imports":["flare.vis.operator.Operator","flare.animate.Transitioner","flare.util.Arrays","flare.vis.data.Data"]},
{"name":"flare.vis.Visualization","size":16540,"imports":["flare.animate.Transitioner","flare.vis.operator.IOperator","flare.animate.Scheduler","flare.vis.events.VisualizationEvent","flare.vis.data.Tree","flare.vis.events.DataEvent","flare.vis.axis.Axes","flare.vis.axis.CartesianAxes","flare.util.Displays","flare.vis.operator.OperatorList","flare.vis.controls.ControlList","flare.animate.ISchedulable","flare.vis.data.Data"]}
]

Просмотреть файл

@ -0,0 +1,49 @@
(function() {
packages = {
// Lazily construct the package hierarchy from class names.
root: function(classes) {
var map = {};
function find(name, data) {
var node = map[name], i;
if (!node) {
node = map[name] = data || {name: name, children: []};
if (name.length) {
node.parent = find(name.substring(0, i = name.lastIndexOf(".")));
node.parent.children.push(node);
node.key = name.substring(i + 1);
}
}
return node;
}
classes.forEach(function(d) {
find(d.name, d);
});
return map[""];
},
// Return a list of imports for the given array of nodes.
imports: function(nodes) {
var map = {},
imports = [];
// Compute a map from name to node.
nodes.forEach(function(d) {
map[d.data.name] = d;
});
// For each import, construct a link from the source to target node.
nodes.forEach(function(d) {
if (d.data.imports) d.data.imports.forEach(function(i) {
imports.push({source: map[d.data.name], target: map[i]});
});
});
return imports;
}
};
})();

Просмотреть файл

@ -5,11 +5,8 @@ var cluster = d3.layout.cluster()
.sort(null)
.children(function(d) { return isNaN(d.value) ? d3.entries(d.value) : null; });
var diagonal = d3.svg.diagonal()
.projection(function(d) {
var r = d.y, a = (d.x - 90) / 180 * Math.PI;
return [r * Math.cos(a), r * Math.sin(a)];
});
var diagonal = d3.svg.diagonal.radial()
.projection(function(d) { return [d.y, d.x / 180 * Math.PI]; });
var vis = d3.select("#chart").append("svg:svg")
.attr("width", r * 2)

Просмотреть файл

@ -6,11 +6,8 @@ var tree = d3.layout.tree()
.children(function(d) { return isNaN(d.value) ? d3.entries(d.value) : null; })
.separation(function(a, b) { return (a.parent == b.parent ? 1 : 2) / a.depth; });
var diagonal = d3.svg.diagonal()
.projection(function(d) {
var r = d.y, a = (d.x - 90) / 180 * Math.PI;
return [r * Math.cos(a), r * Math.sin(a)];
});
var diagonal = d3.svg.diagonal.radial()
.projection(function(d) { return [d.y, d.x / 180 * Math.PI]; });
var vis = d3.select("#chart").append("svg:svg")
.attr("width", r * 2)

Просмотреть файл

@ -1 +1 @@
d3 = {version: "1.21.0"}; // semver
d3 = {version: "1.22.0"}; // semver

57
src/layout/bundle.js Normal file
Просмотреть файл

@ -0,0 +1,57 @@
// Implements hierarchical edge bundling using Holten's algorithm. For each
// input link, a path is computed that travels through the tree, up the parent
// hierarchy to the least common ancestor, and then back down to the destination
// node. Each path is simply an array of nodes.
d3.layout.bundle = function() {
return function(links) {
var paths = [],
i = -1,
n = links.length;
while (++i < n) paths.push(d3_layout_bundlePath(links[i]));
return paths;
};
};
function d3_layout_bundlePath(link) {
var start = link.source,
end = link.target,
lca = d3_layout_bundleLeastCommonAncestor(start, end),
points = [start];
while (start !== lca) {
start = start.parent;
points.push(start);
}
var k = points.length;
while (end !== lca) {
points.splice(k, 0, end);
end = end.parent;
}
return points;
}
function d3_layout_bundleAncestors(node) {
var ancestors = [],
parent = node.parent;
while (parent != null) {
ancestors.push(node);
node = parent;
parent = parent.parent;
}
ancestors.push(node);
return ancestors;
}
function d3_layout_bundleLeastCommonAncestor(a, b) {
if (a === b) return a;
var aNodes = d3_layout_bundleAncestors(a),
bNodes = d3_layout_bundleAncestors(b),
aNode = aNodes.pop(),
bNode = bNodes.pop(),
sharedNode = null;
while (aNode === bNode) {
sharedNode = aNode;
aNode = aNodes.pop();
bNode = bNodes.pop();
}
return sharedNode;
}

Просмотреть файл

@ -51,35 +51,12 @@ d3.scale.linear = function() {
return rescale();
};
// TODO Dates? Ugh.
function tickRange(m) {
var start = d3.min(domain),
stop = d3.max(domain),
span = stop - start,
step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)),
err = m / (span / step);
// Filter ticks to get closer to the desired count.
if (err <= .15) step *= 10;
else if (err <= .35) step *= 5;
else if (err <= .75) step *= 2;
// Round start and stop values to step interval.
return {
start: Math.ceil(start / step) * step,
stop: Math.floor(stop / step) * step + step * .5, // inclusive
step: step
};
}
scale.ticks = function(m) {
var range = tickRange(m);
return d3.range(range.start, range.stop, range.step);
return d3_scale_linearTicks(domain, m);
};
scale.tickFormat = function(m) {
var n = Math.max(0, -Math.floor(Math.log(tickRange(m).step) / Math.LN10 + .01));
return d3.format(",." + n + "f");
return d3_scale_linearTickFormat(domain, m);
};
scale.nice = function() {
@ -90,6 +67,14 @@ d3.scale.linear = function() {
return rescale();
};
function d3_scale_linearRebind(scale, linear) {
scale.range = d3.rebind(scale, linear.range);
scale.rangeRound = d3.rebind(scale, linear.rangeRound);
scale.interpolate = d3.rebind(scale, linear.interpolate);
scale.clamp = d3.rebind(scale, linear.clamp);
return scale;
};
function d3_scale_linearNice(dx) {
dx = Math.pow(10, Math.round(Math.log(dx) / Math.LN10) - 1);
return {
@ -97,3 +82,30 @@ function d3_scale_linearNice(dx) {
ceil: function(x) { return Math.ceil(x / dx) * dx; },
};
}
// TODO Dates? Ugh.
function d3_scale_linearTickRange(domain, m) {
var extent = d3_scaleExtent(domain),
span = extent[1] - extent[0],
step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)),
err = m / span * step;
// Filter ticks to get closer to the desired count.
if (err <= .15) step *= 10;
else if (err <= .35) step *= 5;
else if (err <= .75) step *= 2;
// Round start and stop values to step interval.
extent[0] = Math.ceil(extent[0] / step) * step;
extent[1] = Math.floor(extent[1] / step) * step + step * .5; // inclusive
extent[2] = step;
return extent;
}
function d3_scale_linearTicks(domain, m) {
return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));
}
function d3_scale_linearTickFormat(domain, m) {
return d3.format(",." + Math.max(0, -Math.floor(Math.log(d3_scale_linearTickRange(domain, m)[2]) / Math.LN10 + .01)) + "f");
}

Просмотреть файл

@ -13,30 +13,25 @@ d3.scale.log = function() {
scale.domain = function(x) {
if (!arguments.length) return linear.domain().map(pow);
log = (x[0] || x[1]) < 0 ? d3_scale_logn : d3_scale_log;
log = x[0] < 0 ? d3_scale_logn : d3_scale_log;
pow = log.pow;
linear.domain(x.map(log));
return scale;
};
scale.range = d3.rebind(scale, linear.range);
scale.rangeRound = d3.rebind(scale, linear.rangeRound);
scale.interpolate = d3.rebind(scale, linear.interpolate);
scale.clamp = d3.rebind(scale, linear.clamp);
scale.nice = function() {
linear.domain(d3_scale_nice(linear.domain(), d3_scale_niceDefault));
return scale;
};
scale.ticks = function() {
var d = linear.domain(),
var extent = d3_scaleExtent(linear.domain()),
ticks = [];
if (d.every(isFinite)) {
var i = Math.floor(d[0]),
j = Math.ceil(d[1]),
u = pow(d[0]),
v = pow(d[1]);
if (extent.every(isFinite)) {
var i = Math.floor(extent[0]),
j = Math.ceil(extent[1]),
u = pow(extent[0]),
v = pow(extent[1]);
if (log === d3_scale_logn) {
ticks.push(pow(i));
for (; i++ < j;) for (var k = 9; k > 0; k--) ticks.push(pow(i) * k);
@ -52,10 +47,10 @@ d3.scale.log = function() {
};
scale.tickFormat = function() {
return function(d) { return d.toPrecision(1); };
return d3_scale_logTickFormat;
};
return scale;
return d3_scale_linearRebind(scale, linear);
};
function d3_scale_log(x) {
@ -73,3 +68,7 @@ d3_scale_log.pow = function(x) {
d3_scale_logn.pow = function(x) {
return -Math.pow(10, -x);
};
function d3_scale_logTickFormat(d) {
return d.toPrecision(1);
}

Просмотреть файл

@ -1,6 +1,5 @@
d3.scale.pow = function() {
var linear = d3.scale.linear(),
tick = d3.scale.linear(), // TODO better tick formatting...
exponent = 1,
powp = Number,
powb = powp;
@ -15,20 +14,20 @@ d3.scale.pow = function() {
scale.domain = function(x) {
if (!arguments.length) return linear.domain().map(powb);
var pow = (x[0] || x[1]) < 0 ? d3_scale_pown : d3_scale_pow;
var pow = (x[0] || x[x.length - 1]) < 0 ? d3_scale_pown : d3_scale_pow;
powp = pow(exponent);
powb = pow(1 / exponent);
linear.domain(x.map(powp));
tick.domain(x);
return scale;
};
scale.range = d3.rebind(scale, linear.range);
scale.rangeRound = d3.rebind(scale, linear.rangeRound);
scale.interpolate = d3.rebind(scale, linear.interpolate);
scale.clamp = d3.rebind(scale, linear.clamp);
scale.ticks = tick.ticks;
scale.tickFormat = tick.tickFormat;
scale.ticks = function(m) {
return d3_scale_linearTicks(scale.domain(), m);
};
scale.tickFormat = function(m) {
return d3_scale_linearTickFormat(scale.domain(), m);
};
scale.nice = function() {
return scale.domain(d3_scale_nice(scale.domain(), d3_scale_linearNice));
@ -41,7 +40,7 @@ d3.scale.pow = function() {
return scale.domain(domain);
};
return scale;
return d3_scale_linearRebind(scale, linear);
};
function d3_scale_pow(e) {

Просмотреть файл

@ -1 +1,6 @@
d3.scale = {};
function d3_scaleExtent(domain) {
var start = domain[0], stop = domain[domain.length - 1];
return start < stop ? [start, stop] : [stop, start];
}

10
src/svg/area-radial.js Normal file
Просмотреть файл

@ -0,0 +1,10 @@
d3.svg.area.radial = function() {
var area = d3_svg_area(d3_svg_lineRadial);
area.radius = area.x, delete area.x;
area.innerRadius = area.x0, delete area.x0;
area.outerRadius = area.x1, delete area.x1;
area.angle = area.y, delete area.y;
area.startAngle = area.y0, delete area.y0;
area.endAngle = area.y1, delete area.y1;
return area;
};

Просмотреть файл

@ -1,53 +1,84 @@
d3.svg.area = function() {
var x = d3_svg_lineX,
y0 = d3_svg_areaY0,
function d3_svg_area(projection) {
var x0 = d3_svg_lineX,
x1 = d3_svg_lineX,
y0 = 0,
y1 = d3_svg_lineY,
interpolate = "linear",
interpolator = d3_svg_lineInterpolators[interpolate],
tension = .7;
// TODO horizontal / vertical / radial orientation
function area(d) {
return d.length < 1 ? null
: "M" + interpolator(d3_svg_linePoints(this, d, x, y1), tension)
+ "L" + interpolator(d3_svg_linePoints(this, d, x, y0).reverse(), tension)
+ "Z";
if (d.length < 1) return null;
var points0 = d3_svg_linePoints(this, d, x0, y0),
points1 = d3_svg_linePoints(this, d, x0 === x1 ? d3_svg_areaX(points0) : x1, y0 === y1 ? d3_svg_areaY(points0) : y1);
return "M" + interpolator(projection(points1), tension)
+ "L" + interpolator(projection(points0.reverse()), tension)
+ "Z";
}
area.x = function(v) {
if (!arguments.length) return x;
x = v;
area.x = function(x) {
if (!arguments.length) return x1;
x0 = x1 = x;
return area;
};
area.y0 = function(v) {
if (!arguments.length) return y0;
y0 = v;
area.x0 = function(x) {
if (!arguments.length) return x0;
x0 = x;
return area;
};
area.y1 = function(v) {
area.x1 = function(x) {
if (!arguments.length) return x1;
x1 = x;
return area;
};
area.y = function(y) {
if (!arguments.length) return y1;
y1 = v;
y0 = y1 = y;
return area;
};
area.interpolate = function(v) {
area.y0 = function(y) {
if (!arguments.length) return y0;
y0 = y;
return area;
};
area.y1 = function(y) {
if (!arguments.length) return y1;
y1 = y;
return area;
};
area.interpolate = function(x) {
if (!arguments.length) return interpolate;
interpolator = d3_svg_lineInterpolators[interpolate = v];
interpolator = d3_svg_lineInterpolators[interpolate = x];
return area;
};
area.tension = function(v) {
area.tension = function(x) {
if (!arguments.length) return tension;
tension = v;
tension = x;
return area;
};
return area;
}
d3.svg.area = function() {
return d3_svg_area(Object);
};
function d3_svg_areaY0() {
return 0;
function d3_svg_areaX(points) {
return function(d, i) {
return points[i][0];
};
}
function d3_svg_areaY(points) {
return function(d, i) {
return points[i][1];
};
}

Просмотреть файл

@ -0,0 +1,22 @@
d3.svg.diagonal.radial = function() {
var diagonal = d3.svg.diagonal(),
projection = d3_svg_diagonalProjection,
projection_ = diagonal.projection;
diagonal.projection = function(x) {
return arguments.length
? projection_(d3_svg_diagonalRadialProjection(projection = x))
: projection;
};
return diagonal;
};
function d3_svg_diagonalRadialProjection(projection) {
return function() {
var d = projection.apply(this, arguments),
r = d[0],
a = d[1] + d3_svg_arcOffset;
return [r * Math.cos(a), r * Math.sin(a)];
};
}

22
src/svg/line-radial.js Normal file
Просмотреть файл

@ -0,0 +1,22 @@
d3.svg.line.radial = function() {
var line = d3_svg_line(d3_svg_lineRadial);
line.radius = line.x, delete line.x;
line.angle = line.y, delete line.y;
return line;
};
function d3_svg_lineRadial(points) {
var point,
i = -1,
n = points.length,
r,
a;
while (++i < n) {
point = points[i];
r = point[0];
a = point[1] + d3_svg_arcOffset;
point[0] = r * Math.cos(a);
point[1] = r * Math.sin(a);
}
return points;
}

Просмотреть файл

@ -1,4 +1,4 @@
d3.svg.line = function() {
function d3_svg_line(projection) {
var x = d3_svg_lineX,
y = d3_svg_lineY,
interpolate = "linear",
@ -6,8 +6,7 @@ d3.svg.line = function() {
tension = .7;
function line(d) {
return d.length < 1 ? null
: "M" + interpolator(d3_svg_linePoints(this, d, x, y), tension);
return d.length < 1 ? null : "M" + interpolator(projection(d3_svg_linePoints(this, d, x, y)), tension);
}
line.x = function(v) {
@ -35,6 +34,10 @@ d3.svg.line = function() {
};
return line;
}
d3.svg.line = function() {
return d3_svg_line(Object);
};
// Converts the specified array of data into an array of points
@ -81,6 +84,7 @@ var d3_svg_lineInterpolators = {
"basis": d3_svg_lineBasis,
"basis-open": d3_svg_lineBasisOpen,
"basis-closed": d3_svg_lineBasisClosed,
"bundle": d3_svg_lineBundle,
"cardinal": d3_svg_lineCardinal,
"cardinal-open": d3_svg_lineCardinalOpen,
"cardinal-closed": d3_svg_lineCardinalClosed,
@ -290,6 +294,24 @@ function d3_svg_lineBasisClosed(points) {
return path.join("");
}
function d3_svg_lineBundle(points, tension) {
var n = points.length - 1,
x0 = points[0][0],
y0 = points[0][1],
dx = points[n][0] - x0,
dy = points[n][1] - y0,
i = -1,
p,
t;
while (++i <= n) {
p = points[i];
t = i / n;
p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);
p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);
}
return d3_svg_lineBasis(points);
}
// Returns the dot product of the given four-element vectors.
function d3_svg_lineDot4(a, b) {
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];

Просмотреть файл

@ -79,6 +79,14 @@ console.log(" 5 -> ", x.ticks(5).map(x.tickFormat(5)).join(", "));
console.log(" 10 -> ", x.ticks(10).map(x.tickFormat(10)).join(", "));
console.log("");
var x = d3.scale.linear().domain([1, 0]);
console.log("descending ticks:");
console.log(" 1 -> ", x.ticks(1).map(x.tickFormat(1)).join(", "));
console.log(" 2 -> ", x.ticks(2).map(x.tickFormat(2)).join(", "));
console.log(" 5 -> ", x.ticks(5).map(x.tickFormat(5)).join(", "));
console.log(" 10 -> ", x.ticks(10).map(x.tickFormat(10)).join(", "));
console.log("");
var x = d3.scale.linear().clamp(true);
console.log("domain clamping:")
console.log(" inspection -> ", x.clamp());

Просмотреть файл

@ -56,6 +56,12 @@ ticks:
5 -> 0.0, 0.2, 0.4, 0.6, 0.8, 1.0
10 -> 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0
descending ticks:
1 -> 0, 1
2 -> 0.0, 0.5, 1.0
5 -> 0.0, 0.2, 0.4, 0.6, 0.8, 1.0
10 -> 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0
domain clamping:
inspection -> true
under -> 0

Просмотреть файл

@ -15,6 +15,18 @@ console.log(" 10 -> ", f(x(10)));
console.log(" 100 -> ", f(x(100)));
console.log("");
var x = d3.scale.log().domain([10, 1]);
console.log("domain([10, 1]).range([0, 1]):");
console.log(" -5 -> ", f(x(-5)));
console.log(" 0 -> ", f(x(0)));
console.log(" 0.01 -> ", f(x(0.01)));
console.log(" 0.1 -> ", f(x(0.1)));
console.log(" 1 -> ", f(x(1)));
console.log(" 5 -> ", f(x(5)));
console.log(" 10 -> ", f(x(10)));
console.log(" 100 -> ", f(x(100)));
console.log("");
var x = d3.scale.log().invert;
console.log("domain([1, 10]).range([0, 1]).invert:");
console.log(" 0 -> ", f(x(0)));
@ -86,6 +98,7 @@ console.log(" [.1, 10] -> ", x.ticks().map(f).join(", "));
console.log(" [.1, 100] -> ", x.domain([.1, 100]).ticks().map(f).join(", "));
console.log(" [1, 100] -> ", x.domain([1, 100]).ticks().map(f).join(", "));
console.log(" [-100, -1] -> ", x.domain([-100, -1]).ticks().map(f).join(", "));
console.log(" [100, 1] -> ", x.domain([100, 1]).ticks().map(f).join(", "));
console.log("");
var x = d3.scale.log().domain([1, 2]).clamp(true);

Просмотреть файл

@ -8,6 +8,16 @@ domain([1, 10]).range([0, 1]):
10 -> 1.000
100 -> 2.000
domain([10, 1]).range([0, 1]):
-5 -> NaN
0 -> Infinity
0.01 -> 3.000
0.1 -> 2.000
1 -> 1.000
5 -> 0.301
10 -> 0.000
100 -> 1.000
domain([1, 10]).range([0, 1]).invert:
0 -> 1.000
0.01 -> 1.023
@ -62,6 +72,7 @@ ticks:
[.1, 100] -> 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1e+1, 2e+1, 3e+1, 4e+1, 5e+1, 6e+1, 7e+1, 8e+1, 9e+1, 1e+2
[1, 100] -> 1, 2, 3, 4, 5, 6, 7, 8, 9, 1e+1, 2e+1, 3e+1, 4e+1, 5e+1, 6e+1, 7e+1, 8e+1, 9e+1, 1e+2
[-100, -1] -> -1e+2, -9e+1, -8e+1, -7e+1, -6e+1, -5e+1, -4e+1, -3e+1, -2e+1, -1e+1, -9, -8, -7, -6, -5, -4, -3, -2, -1
[100, 1] -> 1, 2, 3, 4, 5, 6, 7, 8, 9, 1e+1, 2e+1, 3e+1, 4e+1, 5e+1, 6e+1, 7e+1, 8e+1, 9e+1, 1e+2
domain clamping:
over -> 1

Просмотреть файл

@ -50,6 +50,22 @@ console.log(" 1.00 -> ", x(1.00));
console.log(" 2.00 -> ", x(2.00));
console.log("");
var x = d3.scale.pow().exponent(2);
console.log("ticks:");
console.log(" 1 -> ", x.ticks(1).map(x.tickFormat(1)).join(", "));
console.log(" 2 -> ", x.ticks(2).map(x.tickFormat(2)).join(", "));
console.log(" 5 -> ", x.ticks(5).map(x.tickFormat(5)).join(", "));
console.log(" 10 -> ", x.ticks(10).map(x.tickFormat(10)).join(", "));
console.log("");
var x = d3.scale.pow().exponent(2).domain([1, 0]);
console.log("descending ticks:");
console.log(" 1 -> ", x.ticks(1).map(x.tickFormat(1)).join(", "));
console.log(" 2 -> ", x.ticks(2).map(x.tickFormat(2)).join(", "));
console.log(" 5 -> ", x.ticks(5).map(x.tickFormat(5)).join(", "));
console.log(" 10 -> ", x.ticks(10).map(x.tickFormat(10)).join(", "));
console.log("");
var x = d3.scale.pow().exponent(2).domain([1, 2]).range([0, 1]).clamp(true);
console.log("domain clamping:")
console.log(" under -> ", x(-1));

Просмотреть файл

@ -35,6 +35,18 @@ domain([0, 1]).range(["red", "blue"]).interpolate(hsl):
1.00 -> #0000ff
2.00 -> #0000ff
ticks:
1 -> 0, 1
2 -> 0.0, 0.5, 1.0
5 -> 0.0, 0.2, 0.4, 0.6, 0.8, 1.0
10 -> 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0
descending ticks:
1 -> 0, 1
2 -> 0.0, 0.5, 1.0
5 -> 0.0, 0.2, 0.4, 0.6, 0.8, 1.0
10 -> 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0
domain clamping:
under -> 0
over -> 1

Просмотреть файл

@ -1,5 +1,4 @@
require("./../lib/env-js/envjs/node");
require("./../lib/sizzle/sizzle");
require("./../d3");
var area = d3.svg.area();
@ -10,6 +9,26 @@ console.log(" [[0, 0], [1, 1]]:", area([[0, 0], [1, 1]]));
console.log(" [[0, 0], [1, 1], [2, 0]]:", area([[0, 0], [1, 1], [2, 0]]));
console.log("");
var i = 0,
area = d3.svg.area()
.x(function() { return i++; });
console.log("x(function() { return i++; }):");
console.log(" [[0, 0]]:", area([[0, 0]]));
console.log(" [[0, 0], [1, 1]]:", area([[0, 0], [1, 1]]));
console.log(" [[0, 0], [1, 1], [2, 0]]:", area([[0, 0], [1, 1], [2, 0]]));
console.log("");
var i = 0,
area = d3.svg.area()
.y(function() { return i++; });
console.log("y(function() { return i++; }):");
console.log(" [[0, 0]]:", area([[0, 0]]));
console.log(" [[0, 0], [1, 1]]:", area([[0, 0], [1, 1]]));
console.log(" [[0, 0], [1, 1], [0, 2]]:", area([[0, 0], [1, 1], [0, 2]]));
console.log("");
var area = d3.svg.area()
.y0(-1);

Просмотреть файл

@ -3,6 +3,16 @@ default:
[[0, 0], [1, 1]]: M0,0L1,1L1,0L0,0Z
[[0, 0], [1, 1], [2, 0]]: M0,0L1,1L2,0L2,0L1,0L0,0Z
x(function() { return i++; }):
[[0, 0]]: M0,0L0,0Z
[[0, 0], [1, 1]]: M1,0L2,1L2,0L1,0Z
[[0, 0], [1, 1], [2, 0]]: M3,0L4,1L5,0L5,0L4,0L3,0Z
y(function() { return i++; }):
[[0, 0]]: M0,0L0,0Z
[[0, 0], [1, 1]]: M0,1L1,2L1,2L0,1Z
[[0, 0], [1, 1], [0, 2]]: M0,3L1,4L0,5L0,5L1,4L0,3Z
y0(-1):
[[0, 0]]: M0,0L0,-1Z
[[0, 0], [1, 1]]: M0,0L1,1L1,-1L0,-1Z