【发布时间】:2013-04-21 17:28:18
【问题描述】:
我想使用 dc.js 制作两个绘图 我的数据与多个会话相关(每个会话通常发生在不同的一天)。每个会话都有多个练习,这些练习根据各种参数进行评分。
情节:
- 选择型图。我绘制所有会话(按时间或会话 ID),然后使用过滤器允许用户选择一个范围。
- 聚合型图。这将显示所选训练期间所有锻炼参数数据的平均值。
这个想法是用户可以更改所选范围并寻找性能变化的趋势。
我的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 在多个维度上进行分组?我的图表需要有多个维度,但权力、控制等不能分组,因为它们不是同一事物/单位?
我确定我在组织数据时遗漏了一个技巧。 . .谁能指出我正确的方向?
【问题讨论】:
标签: javascript d3.js dc.js