Гистограмма D3 Javascript - PullRequest
       10

Гистограмма D3 Javascript

2 голосов
/ 01 декабря 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, v + 3 *( Math.random() - .5))
   };
}
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) это не работает и дает мне только черную линию, даже если я изменил интервал max и min.Спасибо.

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011
setInterval(function() {
   data.shift();
   data.push(next());
 }, 1500);

setInterval заставляет код выполняться каждые 1,5 секунды

   data.shift();

Удаляет первый элемент массива data (который заполнен случайными числами)

   data.push(next());

Вставляет новое случайное значение в конец массива. next() - это функция, которая генерирует случайные числа.

Итак, в итоге, data.push(next()); вставляет новое случайное значение в конец массива data

0 голосов
/ 27 марта 2012

Я рекомендую вам использовать фиксированные данные для вашего урока, а не использовать генератор чисел.Чаще всего пользователи диаграмм генерируют данные отдельно, а затем передают данные в инструмент построения диаграмм.Я всегда нахожу это полезным.

Распространенным форматом ввода данных является использование формата после разбора строки D3.csv ...

var dataSet1 = [
  {xCoordinate: "Legend String 1", magnitude: 54, link: "http://www.if4it.com"},
  {xCoordinate: "Legend String 2", magnitude: 21, link: "http://www.if4it.com/glossary.html"},
  {xCoordinate: "Legend String 3", magnitude: 31, link: "http://www.if4it.com/resources.html"},
  {xCoordinate: "Legend String 4", magnitude: 14, link: "http://www.if4it.com/taxonomy.html"},
  {xCoordinate: "Legend String 5", magnitude: 19, link: "http://www.if4it.com/disciplines.html"},
  {xCoordinate: "Legend String 6", magnitude: 47, link: "http://www.if4it.com"},
  {xCoordinate: "Legend String 7", magnitude: 27, link: "http://www.if4it.com/glossary.html"}];

У меня есть рабочий пример наgithub под названием " Несколько вертикальных гистограмм, смешанных с общими конструкциями HTML-макета ."

Одна вещь, которую я хотел бы попробовать сделать, - это использование событий для управления такими вещами, как выделение определенных полоспри наведении курсора на текстовые условные обозначения справа от графика.Если вы знаете, как это сделать, пожалуйста, уточните.

Надеюсь, это поможет.

Фрэнк

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