2016-03-15 3 views
0

Я пытаюсь отменить из строк, которые имеют значение у> 5000. Вот график со всеми данными из CSV файла:d3.js массив данных, если оператор

http://dtech.id.lv/d3/origin.html

А вот моя попытка изменить функцию Foreach с, если заявление:

http://dtech.id.lv/d3/modif.html

// Get the data 
    d3.csv("data.csv", function(error, data) { 
     data.forEach(function(d) { 

      if (d.close < 5000) { 
       less5000++; 
     d.close = +d.close; 
     d.date = parseDate(d.date); 
      } 
    if (d.close > 5000) { 
       over5000++; 
      } 

    total++; 

     }); 

Что-то здесь не так, и я не могу понять как правильно это записать. Может ли кто-нибудь указать мне, как правильно это сделать? Спасибо!

ответ

1

ошибка где-то еще:

Некоторые из ваших записей данных имеют неправильный формат даты, поэтому x(d.date) в методе Valueline возвращает NaN, которые не могут быть отображены и d3 аварий (обратитесь к JS консоль в http://dtech.id.lv/d3/modif.html) ,

Вот как ваша первая запись данных выглядит, что прекрасно: {dd: "2016-03-13", date: Mon Jan 01 1900 00:00:03 GMT+0100 (CET), close: 131}

... и это как недопустимое один в наборе данных выглядит следующим образом: {dd: "2016-03-13", date: "10:54:43", close: "10465"}

Есть около 20 данных записи, которые имеют недействительные объекты даты в вас data.csv

UPDATE

Поведение выше потому, что вы не разобрать d.date если d.clos e - 5000 или более. Обновите код

// Get the data 
d3.csv("data.csv", function(error, data) { 
    data.forEach(function(d) { 
     if (d.close < 5000) { 
       less5000++; 
     } 
     if (d.close > 5000) { 
       over5000++; 
     } 

     d.close = +d.close; 
     d.date = parseDate(d.date); 

     total++; 
    }); 
... 

UPDATE 2

Чтобы отфильтровать ваш массив использовать массив .filter (см: https://github.com/mbostock/d3/wiki/Arrays)! В вашем случае:

// Get the data 
d3.csv("data.csv", function(error, data) { 
    data = data.filter(function(d){ 
      d.close = +d.close; 
      d.date = parseDate(d.date); 

      return d.close < 5000; 
    }); 
... 

данных будет содержать только те записи, которые имеют d.close меньше, чем 5000.

+0

Но как же? записи являются отформатированы же ... 2016-03-13,00: 00: 03,131,26,34.43 2016-03-13,10: 54: 43,10465,26,0.43 – enflam3

+0

Ооо, взял меня в то время, но я нашел ошибку. Вы не разбираете дату, если d.close 5000 или более. Я собираюсь обновить свой ответ. – vuza

+0

Основная цель состоит в том, чтобы отменить значения d.close более 5000, так что граф содержит только значения d.close <5000. Я не могу определить, как их отменить. – enflam3

Смежные вопросы