D3
OG
Old school D3 from simpler times
All examples
By author
By category
About
morganhaoyu
Full window
Github gist
Brush I
Built with
blockbuilder.org
//https://bl.ocks.org/mbostock/6498000 <!DOCTYPE html> <style> .selected { fill: red; stroke: brown; } </style> <svg width="960" height="500"></svg> <script src="https://d3js.org/d3.v4.min.js"></script> <script> var randomX = d3.randomUniform(0, 10), randomY = d3.randomNormal(0.5, 0.12), data = d3.range(300).map(function() { return [randomX(), randomY()]; }); var svg = d3.select("svg"), margin = {top: 194, right: 50, bottom: 214, left: 50}, width = +svg.attr("width") - margin.left - margin.right, height = +svg.attr("height") - margin.top - margin.bottom, g = svg.append("g").attr("transform", "translate(" + margin.left + "," + margin.top + ")"); var x = d3.scaleLinear() .domain([0, 10]) .range([0, width]); var y = d3.scaleLinear() .range([height, 0]); var brush = d3.brushX() .extent([[0, 0], [width, height]]) .on("start brush", brushed); var dot = g.append("g") .attr("fill-opacity", 0.2) .selectAll("circle") .data(data) .enter().append("circle") .attr("transform", function(d) { return "translate(" + x(d[0]) + "," + y(d[1]) + ")"; }) //?? .attr("r", 3.5); g.append("g") .call(brush) .call(brush.move, [4, 5].map(x)) .selectAll(".overlay") .each(function(d) { d.type = "selection"; }) // Treat overlay interaction as move. .on("mousedown touchstart", brushcentered); // Recenter before brushing. g.append("g") .attr("transform", "translate(0," + height + ")") .call(d3.axisBottom(x)); function brushcentered() { var dx = x(1) - x(0), // Use a fixed width when recentering. cx = d3.mouse(this)[0], // 鼠标所在位置的x x0 = cx - dx / 2, // 向左移fixed width的一半 x1 = cx + dx / 2; // 向右移fixed width的一半 d3.select(this.parentNode).call(brush.move, x1 > width ? [width - dx, width] : x0 < 0 ? [0, dx] : [x0, x1]); // 考虑左右边界的情况 } function brushed() { var extent = d3.event.selection.map(x.invert, x); dot.classed("selected", function(d) { return extent[0] <= d[0] && d[0] <= extent[1]; }); } </script>
https://d3js.org/d3.v4.min.js