Я пытаюсь показать состояние машины во времени. Часть этого состоит в том, чтобы воспроизвести/автоматизировать отчет, который раньше делался вручную. Он состоит из раскрашивания 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). Но в этом случае мне нужно добавить несколько временных интервалов в зависимости от продолжительности состояния.
Кроме того, поскольку в настоящее время используется другой перекрестный фильтр, карты не обновляют друг друга.
Вот мои вопросы, связанные с этим:
- Могу ли я отображать Heatmap без предоставления информации для всех индивидуальных «клеток»? (т. е. разбивать ячейки на основе значения, похожего на rowspan в таблице)
- Могу ли я добавить сразу несколько значений внутри group(). reduce()?
- Есть ли простой способ инвертировать yAxis, так что 0 находится наверху?
- При нажатии строки в тепловой карте она выбирает колонку и наоборот?
Я не уверен, что это должно быть в группе crossfilter. Если так, пожалуйста, проигнорируйте мой бессвязный характер. Если кто-то знает, как лучше привязывать диаграммы к группировке, пожалуйста, дайте мне знать.
--Nico
Я не думаю, что вы можете сделать это с помощью группы() уменьшить() (добавьте одну запись 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 –