D3 Javascript функция построения графиков - PullRequest
0 голосов
/ 05 декабря 2011

Я пытаюсь написать учебник о d3, и я нашел пару сайтов, которые могут помочь, но с недостаточным количеством деталей.

У меня есть следующий код, который выводит гистограмму:

<html>
<head>
<div id="mainGraph">
        </div>
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<script type="text/javascript">

var t = 1, // start time (seconds since epoch)
    v = 0, // start value (subscribers)
    data = d3.range(33).map(next); // starting dataset

 function next() {
   return {
    time: ++t,
     value: v = ~~Math.max(10, Math.min(80, Math.exp(t)))
   };
}
setInterval(function() {
   data.shift();
   data.push(next());
 }, 1500);

  var w = 40,
      h = 100;

  var x = d3.scale.linear()
      .domain([0, 1])
      .range([0, w]);

  var y = d3.scale.linear()
      .domain([0, 100])
     .rangeRound([0, h]);

     var chart = d3.select("body")
     .append("svg:svg")
     .attr("class", "chart")
     .attr("width", w * data.length + 10)
     .attr("height", h);

     chart.selectAll("rect")
     .data(data)
    .enter().append("svg:rect")
     .attr("x", function(d, i) { return x(i) + 5; })
     .attr("y", function(d) { return h - y(d.value) + 5; })
     .attr("width", w)
     .attr("height", function(d) { return y(d.value); });

     chart.append("svg:line")
     .attr("x1", 0)
     .attr("x2", w * data.length)
     .attr("y1", h + 5)
     .attr("y2", h + 5)
     .attr("stroke", "#000");





    </script>           
    </body>
    </html>

Первый вопрос: что делает функция ()

второй вопрос, когда я пытаюсь изменить набор данных, поэтому я пытаюсь поместить v в функцию t, например v = Math.exp (t) это не работает и дает мне только черную линию, хотя я изменил интервал макс и мин. Спасибо.

1 Ответ

2 голосов
/ 05 декабря 2011

function() как в:

setInterval(function() { ... });

называется лямбда-функцией (или анонимусом, если хотите). Это означает, что функция не имеет имени и не может быть вызвана вне ее области действия. В этом случае для функции setInterval требуется функция в качестве параметра, поэтому мы отправляем полное определение функции, а не просто ссылку на нее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...