toolkit/javascript/d3/examples/brush/brush.html
changeset 47 c0b4a8b5a012
equal deleted inserted replaced
46:efd9c589177a 47:c0b4a8b5a012
       
     1 <!DOCTYPE html>
       
     2 <html>
       
     3   <head>
       
     4     <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
       
     5     <title>Brush</title>
       
     6     <script type="text/javascript" src="../../d3.js"></script>
       
     7     <style type="text/css">
       
     8 
       
     9 svg {
       
    10   font: 10px sans-serif;
       
    11 }
       
    12 
       
    13 circle {
       
    14   -webkit-transition: fill-opacity 250ms linear;
       
    15 }
       
    16 
       
    17 .selecting circle {
       
    18   fill-opacity: .2;
       
    19 }
       
    20 
       
    21 .selecting circle.selected {
       
    22   stroke: #f00;
       
    23 }
       
    24 
       
    25 .axis path, .axis line {
       
    26   fill: none;
       
    27   stroke: #000;
       
    28   shape-rendering: crispEdges;
       
    29 }
       
    30 
       
    31 .brush .extent {
       
    32   stroke: #fff;
       
    33   fill-opacity: .125;
       
    34   shape-rendering: crispEdges;
       
    35 }
       
    36 
       
    37     </style>
       
    38   </head>
       
    39   <body>
       
    40     <script type="text/javascript">
       
    41 
       
    42 var random = d3.random.normal(.5, .1),
       
    43     data = d3.range(800).map(function() { return [random(), random()]; });
       
    44 
       
    45 var m = [10, 10, 20, 40],
       
    46     w = 960 - m[1] - m[3],
       
    47     h = 500 - m[0] - m[2];
       
    48 
       
    49 var x = d3.scale.linear().range([0, w]),
       
    50     y = d3.scale.linear().range([h, 0]);
       
    51 
       
    52 var svg = d3.select("body").append("svg:svg")
       
    53     .attr("width", w + m[1] + m[3])
       
    54     .attr("height", h + m[0] + m[2])
       
    55   .append("svg:g")
       
    56     .attr("transform", "translate(" + m[3] + "," + m[0] + ")");
       
    57 
       
    58 svg.append("svg:g")
       
    59     .attr("class", "x axis")
       
    60     .attr("transform", "translate(0," + h + ")")
       
    61     .call(d3.svg.axis().scale(x).orient("bottom"));
       
    62 
       
    63 svg.append("svg:g")
       
    64     .attr("class", "y axis")
       
    65     .call(d3.svg.axis().scale(y).orient("left"));
       
    66 
       
    67 var circle = svg.selectAll("circle")
       
    68     .data(data)
       
    69   .enter().append("svg:circle")
       
    70     .attr("transform", function(d) { return "translate(" + x(d[0]) + "," + y(d[1]) + ")"; })
       
    71     .attr("r", 3.5);
       
    72 
       
    73 svg.append("svg:g")
       
    74     .attr("class", "brush")
       
    75     .call(d3.svg.brush().x(x).y(y)
       
    76     .on("brushstart", brushstart)
       
    77     .on("brush", brush)
       
    78     .on("brushend", brushend));
       
    79 
       
    80 function brushstart() {
       
    81   svg.classed("selecting", true);
       
    82 }
       
    83 
       
    84 function brush() {
       
    85   var e = d3.event.target.extent();
       
    86   circle.classed("selected", function(d) {
       
    87     return e[0][0] <= d[0] && d[0] < e[1][0]
       
    88         && e[0][1] <= d[1] && d[1] < e[1][1];
       
    89   });
       
    90 }
       
    91 
       
    92 function brushend() {
       
    93   svg.classed("selecting", !d3.event.target.empty());
       
    94 }
       
    95 
       
    96     </script>
       
    97   </body>
       
    98 </html>