Доброго вечера,dc.js Composite Graph - земля Новой линии для каждого человек
Я пытаюсь взять данные из базы данных, полных отчетов часов (имя, метки времени, количество отработанных часов и т.д.) и создайте график, используя dc.js для визуализации данных. Я хотел бы, чтобы временная метка находилась на оси x, сумме часов для конкретной отметки времени по оси y и новой гистограммы для каждого уникального имени на одной диаграмме.
Похоже на то, что с использованием crossfilter.js отметка времени должна быть моей «размерностью», а затем суммой часов должна быть моя «группа».
Вопрос 1: как я мог бы использовать измерение и группу для дальнейшего разделения данных на основе имени человека, а затем создать гистограмму для добавления в мой составной граф? Я хотел бы, чтобы функция crossfilter.js оставалась неповрежденной, поэтому, если я добавлю инструмент диапазона дат или какой-либо другой контролируемый пользователем фильтр, все будет обновляться соответствующим образом.
Вопрос 2, мои временные метки находятся в формате даты и времени MySQL: YYYY-mm-dd HH: MM: SS, так как бы я пошел о снижении точности? Например, если я хочу объединить все записи с одного дня в одну запись (точность дня) или объединить все записи за один месяц в одну запись (точность месяца).
Заранее благодарен!
---- Добавлено 2017/01/28 16:06
Для дальнейшего уточнения, я ссылки на API-интерфейсы Crossfilter & DC наряду с DC NASDAQ и Composite примеров. Пример Composite показал мне, как разместить несколько линейных/гистограмм на одном графике. На составной диаграмме, которую я создал, на каждой из гистограмм я добавил измерение, основанное на отметках времени в наборе данных. Теперь я пытаюсь выяснить, как определить группы для каждого. Я хочу, чтобы каждая гистограмма отображала общее время работы за метку времени.
Например, у меня есть пять человек в моей базе данных, поэтому я хочу, чтобы в одной составной диаграмме было пять диаграмм. Сегодня все пять представленных отчетов говорят, что они работали 8 часов, так что теперь все пять гистограмм должны показывать отметку на 28.08.2017 по оси x и 8 часов по оси y.
var parseDate = d3.time.format('%Y-%m-%d %H:%M:%S').parse;
data.forEach(function(d) {
d.timestamp = parseDate(d.timestamp);
});
var ndx = crossfilter(data);
var writtenDimension = ndx.dimension(function(d) {
return d.timestamp;
});
var hoursSumGroup = writtenDimension.group().reduceSum(function(d) {
return d.time_total;
});
var minDate = parseDate('2017-01-01 00:00:00');
var maxDate = parseDate('2017-01-31 23:59:59');
var mybarChart = dc.compositeChart("#my_chart");
mybarChart
.width(window.innerWidth)
.height(480)
.x(d3.time.scale().domain([minDate,maxDate]))
.brushOn(false)
.clipPadding(10)
.yAxisLabel("This is the Y Axis!")
.compose([
dc.barChart(mybarChart)
.dimension(writtenDimension)
.colors('red')
.group(hoursSumGroup, "Top Line")
]);
Так на основе того, что я прямо сейчас и пример я обеспечил, в разделе создания письма я должен иметь 5 карт, потому что есть 5 людей (очевидно, это должно быть динамичными, в конце концов) и каждые из этих диаграмм следует показывать только метку времени: total_time данные для этого человека.
На данный момент я не знаю, как продолжить распад группы часовSumGroup на основе каждого человека, и именно здесь приходит мой вопрос №1, и мне нужна помощь в выяснении.
Вопрос № 2 выше, что я хочу убедиться, что код является динамическим (больше людей могут обрабатываться без изменения кода), когда minDate и maxDate позже привязаны к полям ввода пользователя, диаграммы обновляются автоматически (I предположите, что каким-то образом отрегулируйте переменную размера), и если я добавлю фильтр имен, если я отменим выбор имен, которые будет обновляться диаграммой, удалив данные для этого человека.
Вопрос №3, который я сейчас понимаю, я хочу выяснить, как получить имя человека в подсказке указателя (название) вместе с значениями timestamp и total_time.
Привет, добро пожаловать в SO и dc.js! Я не уверен, что вы имеете в виду со всеми упоминаниями о барах - ищете ли вы [диаграмму линейных рядов] (http://dc-js.github.io/dc.js/examples/series.html)? Также обратите внимание на [пример временных интервалов переключения] (http://dc-js.github.io/dc.js/examples/switching-time-intervals.html) за идею объединить по дням или месяцам. Наконец, вот [документация для d3.time.format.parse] (https://github.com/d3/d3-3.x-api-reference/blob/master/Time-Formatting.md#parse), для превращая ваши строки в объекты даты. – Gordon
Поскольку это стоит, это не большой вопрос, лучше здесь прыгать и начинать кодирование и ждать, пока вы не застрянете, прежде чем обращаться за помощью. Если вы хотите провести более неторопливое обсуждение, не стесняйтесь связаться [в группе пользователей] (https://groups.google.com/forum/?fromgroups#!forum/dc-js-user-group). Я не оставил закрытого голоса, но я бы сказал, что он немного широк, поскольку он стоит. – Gordon
Гордон, я обновил свой вопрос выше в ответ на ваши комментарии. Достаточно ли изменений, чтобы лучше понять, что я хочу делать? – engnfrc