2013-04-21 96 views
1

我想使用dc.js绘制两张图表我的数据涉及多个会话(每个会话通常发生在不同的日子)。每个会话都有多个练习,可以根据各种参数进行评分。为D3绘制多维数据直方图

的情节:

  1. 的选择型曲线。我绘制所有会话(按时间或会话ID),然后使用过滤器来允许用户选择一个范围。
  2. 聚合类型图。这将显示选定会话中所有运动参数数据的平均值。

这个想法是用户可以改变选定的范围,并寻找性能变化的趋势。

我的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

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