我正在尝试渲染一个dc.js barChart,其中y轴的百分比为0-100%,而我的x轴是数字,但是我想按日期对x轴进行排序。
我的数据如下:
date,trend,percent
01/01/2014 13:00,238,53.6
01/01/2014 13:15,239,64.2
01/01/2014 13:30,219,43.1
01/01/2014 13:45,219.2,43.1
01/01/2014 14:00,237.4,50.6
...
我将数据添加到crossfilter
data.forEach(function (d) { d.date = parseDate(d.date); });
var ndx = crossfilter(data);
var trendDimension = ndx.dimension(function (d) { return d.trend; });
var trendGroup = trendDimension.group().reduce(
function (p, v) {
p.time = v.date.getTime();
p.trend = +v.trend;
p.percent = +v.percent;
return p;
},
...
).order(function (p) { return p.time; }); // ??? order by time rather than trend
当我绘制尺寸和组图时,我的x轴按趋势排序,因为我的x域看起来像:
var minTrend = trendDimension.bottom(1)[0].trend;
var maxTrend = trendDimension.top(1)[0].trend;
...
chart.x(d3.scale.linear().domain([minTrend, maxTrend]);
...
chart.render();
一切都是情节,但条形按趋势顺序排序,我希望它们按日期/时间顺序排序。
这可能吗?
修改
我也尝试过:
chart.ordering(function (d) { return d.value.time; });
但这似乎对订购没有影响......
答案 0 :(得分:0)
您想绘制百分比与趋势或百分比与时间的关系吗?
现在您的尺寸处于趋势状态,因此无法按日期订购。 Crossfilter将为每个趋势值(可能包含许多日期)创建一个bin,以及编写reduce函数的方式,它将简单地替换bin的日期条目,以及它看到的最后日期。
如果您想按日期排序然后使用趋势来影响其他美学(例如颜色),您应该使用日期维度,按日期量化的组,不要对您的reduce中的日期做任何事情,并使用日期比例/ xUnits。