bl.ock . , .
, :
function brushed() {
if (d3.event.sourceEvent && d3.event.sourceEvent.type === "zoom") return;
var s = d3.event.selection || x2.range();
x.domain(s.map(x2.invert, x2));
focus.select(".area").attr("d", area);
focus.select(".axis--x").call(xAxis);
svg.select(".zoom").call(zoom.transform, d3.zoomIdentity
.scale(width / (s[1] - s[0]))
.translate(-s[0], 0));
}
function zoomed() {
if (d3.event.sourceEvent && d3.event.sourceEvent.type === "brush") return;
var t = d3.event.transform;
x.domain(t.rescaleX(x2).domain());
focus.select(".area").attr("d", area);
focus.select(".axis--x").call(xAxis);
context.select(".brush").call(brush.move, x.range().map(t.invertX, t));
:
:
, d3.zoomIdentity, , , .
, , .
""
, , brushed() . , , .
d3.event.selection , , ( , ). /, x2, . , , .
, x . x, , . - , () .
var xMin = x2(x.domain()[0]);
var xMax = x2(x.domain()[1]);
var currentDifference = Math.abs(xMin-xMax);
xMin += currentDifference / 2 / 3
xMax -= currentDifference / 2 / 3
x.domain([xMin,xMax].map(x2.invert, x2));
:
var identity = d3.zoomIdentity
.scale(width/ (xMax - xMin))
, . - , , :
var identity = d3.zoomIdentity
.scale(width/ (xMax - xMin))
.translate(-xMin, 0);
, :
var xMin = x2(x.domain()[0]);
var xMax = x2(x.domain()[1]);
var currentDifference = Math.abs(xMax-xMin);
xMin += currentDifference / 2 / 3
xMax -= currentDifference / 2 / 3
x.domain([xMin,xMax].map(x2.invert, x2));
focus.select(".area").attr("d", area);
focus.select(".axis--x").call(xAxis);
var identity = d3.zoomIdentity
.scale(width/ (xMax - xMin))
.translate(-xMin, 0);
context.select(".brush").call(brush.move, x.range().map(identity.invertX, identity));
svg.select(".zoom").call(zoom.transform, identity);
, . , .
:
.
, , :
xMin -= currentDifference / 2 / 3
xMax += currentDifference / 2 / 3
:
xMin -= currentDifference / 2 / 3
xMax -= currentDifference / 2 / 3
.
:
d3.select("body")
.on("keypress", function() {
if (d3.event.key == "a") {
}
else if (d3.event.key == "b" {
}
});
, , asdw :
: , , : .
.