2015-07-30 2 views
0

Правые, так это то, что выглядит мои данные, как:Манипулирование Бары

{ 
    "chartData":[ 
     { 
      "vId":"307", 
      "vNm":"Alejandro Rivera Ulloa", 
      "values":[ 
       {"period":"2015-01","amount":37,"id":132}, 
       {"period":"2015-02","amount":38,"id":133}, 
       {"period":"2015-03","amount":33,"id":134} 
      ] 
     }, 
     { 
      "vId":"308", 
      "vNm": "Daniel Torres", 
      "values": [ 
       {"period":"2015-01","amount":41,"id":135}, 
       {"period":"2015-02","amount":41,"id":136}, 
       {"period":"2015-03","amount":41,"id":137} 
      ] 
     }, 
     { 
      "vId":"309", 
      "vNm": "Pablo Alvarez Garcia", 
      "values":[ 
       {"period":"2015-01","amount":16,"id":138}, 
       {"period":"2015-02","amount":17,"id":139}, 
       {"period":"2015-03","amount":14,"id":140} 
      ], 
     }, 
     { 
      "vId":"391", 
      "vNm":"Janette Avalos de Conte", 
      "values":[ 
       {"period":"2015-01","amount":28.5,"id":141}, 
       {"period":"2015-02","amount":29,"id":142}, 
       {"period":"2015-03","amount":27.5,"id":143} 
      ] 
     } 
    ] 
} 

Теперь я хочу, чтобы этот график (сделанный с различными данными) имеют бруски быть сумма каждого «значений» в данные. enter image description here

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

Итак, в основном. Мой вопрос: как сделать бары высотой сумм каждого отдельного набора «значений»?

Если кому-то нужно уточнение, оставьте комментарий.

Я попытался сделать d3.sum, но это дает мне общую сумму, и итерация через массив сумм и толкание каждой суммы в массив - это не прогулка в парке с D3.

+0

Просьба пояснить, что вы пробовали до сих пор, прочитать [ask], создать MCVE. – Amit

+0

Вы имеете в виду значения, представленные суммой каждой «суммы» в вашем объекте JSON? Кроме того, пожалуйста, укажите ваш фактический код, который генерирует график, а не только данные. – BarFooBar

+0

Если я правильно понял, вам нужно немного поработать с вашими текущими данными: значениями группы по дате и уменьшением суммы. – jarandaf

ответ

1

Следующая функция агрегирует данные так, как вы прокомментировали:

var cookData = function(data){ 
    var keys = {}; 
    var result = []; 
    var values = data.map(function(d) { return d.values; }); 
    values.forEach(function (value){ 
     value.forEach(function (v) { 
      if (keys[v.period]) { 
       keys[v.period] += v.amount;  
      } else { 
       keys[v.period] = v.amount;  
      } 
     }); 
    }) 
    Object.keys(keys).forEach(function (key) { 
     result.push({date: key, amount: keys[key]}); 
    }); 
    return result; 
}; 

Вы можете легко использовать эту функцию в дальнейшем с гистограммой (см this для примера о том, как создать гистограмму).

+0

Блестящий, спасибо. –

+0

Вопрос. Не могли бы вы взглянуть и рассказать мне, почему мои бары не отображаются? –

+0

@AlexeyAyzin не стесняйтесь создавать скрипку и задавать новый вопрос, если необходимо :) – jarandaf

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