在DC中为D3绘制多维度

时间:2013-04-21 17:28:18

标签: javascript d3.js dc.js

我想用dc.js做两个图我的数据涉及多个会话(每个通常在一天内发生)。每个会话都有多个练习,这些练习在各种参数上得分。

情节:

  1. 选择型情节。我绘制所有会话(按时间或可能是会话ID),然后使用过滤器允许用户选择范围。
  2. 聚合型图。这将显示所选会话中所有运动参数数据的平均值。
  3. 这个想法是用户可以改变选定的范围并寻找性能变化的趋势。

    我的json格式数据如下:

     "Data": [
            {
                "excerciseId": 1,
                "startTime": "01-Jan-2013 10:10:00",
                "stopTime": "01-Jan-2013 10:13:00",
                "numberReps": 11,
                "power": 6.3345681,
                "control": 4.180355137,
                "stability": 0.4893870991,
                "rate": 4.375298413,
                "session": 1,
            },
            {
                "excersiseId": 2,
                "startTime": "01-Jan-2013 10:30:00",
                "stopTime": "01-Jan-2013 10:33:00",
                "numberReps": 12,
                "power": 5.118183368,
                "control": 9.957258023,
                "stability": 9.752985592,
                "rate": 3.202822695,
                "session": 1,
            },
            {
                "excersiseId": 1,
                "startTime": "02-Jan-2013 10:30:00",
                "stopTime": "02-Jan-2013 10:33:00",
                "numberReps": 4,
                "power": 5.597765864,
                "control": 4.512012222,
                "stability": 8.563329462,
                "rate": 7.23380183,
                "session": 2,
            },
            ...
            ...
            ...]
    

    然而,我把它重新组织成一个扁平的结构,以便与crossfilter很好地配合。

    我创建了一个像这样的组和维度:

    var sessionDimension = ndx.dimension(function(d) { return d.session; });
    var numRepsBySession = sessionDimension.group().reduceSum(function(d) { return d.numReps; });
    

    我有一个很棒的条形图:

    var sessionsByDateBarChart = dc.barChart("#sessions-By-Date-Bar-Chart");
        sessionsByDateBarChart.width(500)
        .height(150)
        .dimension(sessionDimension)
        .group(numRepsBySession)
        .gap(1)
        .x(d3.scale.linear().domain([0, 5]))
    

    我的问题是制作一个图表来显示所选会话的效果摘要。我真正想要的是dc.rowChart来绘制力量,控制和稳定性的平均值。我对如何组织我的数据感到困惑。如何在多个维度上按reduceSum进行分组?我的图需要有多个维度,但是功率,控制等不能分组,因为它们不是同一个/单位?

    我确信我错过了组织数据的技巧。 。 。谁能指出我正确的方向?

1 个答案:

答案 0 :(得分:1)

您可以melt将数据创建为“变量”或“指标”列,您可以从中创建维度,然后为摘要统计信息执行自定义组缩减。