dc.js热图扩展数据

时间:2015-01-29 19:47:56

标签: dc.js crossfilter

我试图随着时间的推移显示机器状态。部分原因是重现/自动化过去手工完成的报告。它包括根据机器正在进行的操作在Excel中着色2分钟的“时间片”。

(对不起,发布图片的声誉不够,但它是一个经典的热图,状态驱动颜色。一些非DC-JS小提琴:http://jsfiddle.net/ww6Lbnc5/4/

我能够在下面的jsfiddle中生成我想要的大部分内容: http://jsfiddle.net/hwhfxz2t/14/

See fiddle for code.

总状态持续时间(对于选定的时间范围)显示在pieChart中,然后是各个状态行,然后是人们习惯的热图。 (ZOOM和日期选择按钮在小提琴中不起作用,但如果您愿意,可以选择特定的数据范围或放大。)

折线图使用状态的原始表示,包括输入状态的时间和持续时间。

为了使热图工作,我不得不(我认为)获取原始数据并将其转换为单独的分钟块并用状态标记它们。例如,原始数据指定:
RUN 状态 14:30 300
变为:
14:30 = RUN 14:31 = RUN 14:32 = RUN 14:33 = RUN 14:34 = RUN

第233-297行中的代码循环遍历原始数据并生成一个执行此操作的新数据。在给定分钟内存在多个状态的情况下,最后一个状态存活。

这没关系,但似乎这个代码正是在group()中通常完成的.reduce(add,remove,init)。但在这种情况下,我需要根据状态的持续时间添加多个时隙。

另外,因为它现在使用不同的交叉过滤器,所以地图不会互相更新。

以下是我的相关问题:

  1. 我可以在不提供所有个人信息的情况下显示热图 '细胞'? (即基于一个值跨越单元格,类似于表格中的行距)
  2. 我可以在group()中一次添加多个值.reduce()?
  3. 是否有一种简单的方法来反转yAxis,因此0位于顶部?
  4. 点击热图中的一行时,会选择一列,反之亦然?
  5. 我不确定这是否应该在crossfilter组中。如果是这样,请忽略我的漫无边际。如果有人知道如何通过分组更好地保持图表链接,请告诉我。

    - 尼科

1 个答案:

答案 0 :(得分:0)

关于问题3:

DC.js热图目前不支持轴上的自定义顺序功能,但有一个pull request已合并到开发分支中,并且很快就会对公众开放。

您可以手动编辑dc.js文件,将热图中的排序设置为自定义函数。在最新的(2.0.0-beta10)版本中,它是以下行:

rowValues.sort(d3.ascending);

因此

colValues.sort(d3.ascending);