2015-01-29 2 views
0

Я пытаюсь показать состояние машины во времени. Часть этого состоит в том, чтобы воспроизвести/автоматизировать отчет, который раньше делался вручную. Он состоит из раскрашивания 2минут «срезов времени» в Excel на основе того, что делает машина.dc.js информация о расширении теплораспределения

(К сожалению, не хватает репутации, чтобы разместить снимок, но это классический Heatmap, где государство управляет цветом некоторая не DC-JS скрипка:. http://jsfiddle.net/ww6Lbnc5/4/)

я был в состоянии произвести большую часть чего я хочу в следующем jsfiddle: http://jsfiddle.net/hwhfxz2t/14/

See fiddle for code. 

общая продолжительность состояния (за выбранный период времени) отображается в PieChart, а затем отдельных штатов, а затем Heatmap, что люди привыкли. (кнопки выбора номера и даты не работают в скрипке, но вы можете выбрать конкретные диапазоны данных или увеличить масштаб, если хотите).

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

Для того, чтобы карта тепла работала, мне пришлось (я думаю) взять исходные данные и преобразовать их в отдельные мелкие куски и пометить их состоянием. Так, например, оригинал, задающей данные:
        RUN состояние начиная 14:30 для секунд
становится:
        14: 30 = ПУСК, 14: 31 = RUN, 14: 32 = RUN, 14: 33 = RUN и 14 : 34 = RUN

Код в строках 233-297 проходит через исходные данные и генерирует новый, который делает это. В случаях, когда в течение одной минуты имеется более одного состояния, сохраняется последнее состояние.

Это работает нормально, но кажется, что этот код является именно тем, что обычно выполняется в группе(). Reduce (add, remove, init). Но в этом случае мне нужно добавить несколько временных интервалов в зависимости от продолжительности состояния.

Кроме того, поскольку в настоящее время используется другой перекрестный фильтр, карты не обновляют друг друга.

Вот мои вопросы, связанные с этим:

  1. Могу ли я отображать Heatmap без предоставления информации для всех индивидуальных «клеток»? (т. е. разбивать ячейки на основе значения, похожего на rowspan в таблице)
  2. Могу ли я добавить сразу несколько значений внутри group(). reduce()?
  3. Есть ли простой способ инвертировать yAxis, так что 0 находится наверху?
  4. При нажатии строки в тепловой карте она выбирает колонку и наоборот?

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

--Nico

+0

Я не думаю, что вы можете сделать это с помощью группы() уменьшить() (добавьте одну запись RUN в 14:30 в течение 300 секунд для нескольких групп, например 14:30, 14:31 и т. д.). Вы можете сделать это с помощью функции groupAll(). Reduce(), но это немного отличается от group(). Reduce() и плохо документировано. Я на самом деле просто собрал пример того, как это сделать, используя скользящие средние Reductio и Crossfilter (https://github.com/esjewett/reductio), которые вы могли бы использовать в качестве очень похожей проблемы: https: // gist.github.com/esjewett/8291936a4e4054342ba4 (также обсуждение https://github.com/esjewett/reductio/issues/12 –

ответ

0

Относительно Вопрос 3:

dc.js В настоящее время у Схемы Зоны активности не поддерживает функции пользовательского порядка на оси, но есть pull request, который был слит в развивающейся отрасли, и должны быть доступны публика скоро.

Вы можете вручную отредактировать файл dc.js, чтобы настроить сортировку в тепловых картах на пользовательскую функцию. В последней (2.0.0-beta10) версии это следующая строка:.

rowValues.sort(d3.ascending); 

и соответственно

colValues.sort(d3.ascending);