【发布时间】:2016-10-25 20:13:55
【问题描述】:
我有一个当前看起来像这样的行图:
deltaChart
.width(300)
.height(250)
.dimension(deltaDim)
.group(pointsByDelta)
.xAxis().ticks(4);
其中deltaDim 维度由11 个左右的唯一字符串值组成,pointsByDelta 表示相关计数,deltaChart 是 rowChart 类型。
由于deltaDim 值是字符串而不是数字,因此排序是无序的。我已经尝试应用我在 wiki 以及其他帖子中找到的内容来手动重新排序,但完全没有运气。无论格式如何,我都会收到控制台错误:.ordering is not a function()
我尝试过像这样的简单排序:
.ordering(function(d){return -d.value})
这会导致错误。理想情况下,我希望能够执行以下操作:
.ordering(function(d) {
if(d.value == "5 ft") return 0;
else if(d.value == "4 ft") return 1;
else if(d.value == "3 ft") return 2;
else if(d.value == "2 ft") return 3;
else if(d.value == "1 ft") return 4;
else if(d.value == "0 ft") return 5;
else if(d.value == "-1 ft") return 6;
else if(d.value == "-2 ft") return 7;
else if(d.value == "-3 ft") return 8;
else if(d.value == "-4 ft") return 9;
else if(d.value == "-5 ft") return 10;
else return 11;
})
看起来这个主题的大多数帖子都以升序或降序排序的方式得到回应。我什至无法让它表现出来,就我而言,如果可能的话,我需要能够指示顺序。
任何帮助表示赞赏。谢谢!
【问题讨论】:
-
不确定人们为什么要回答有关 String 的问题,这离基地很远。也许您正在使用不支持此功能的真正旧版本的 dc.js?它是在 1.5 或 1.6 中引入的。您在上面显示的内容应该可以工作。
-
戈登,谢谢你的来信。我加倍检查,我使用的是 1.6。从我看到的其他示例中,我认为它看起来应该可以工作......我真的很想知道为什么我会收到错误,即使是不太复杂的排序。
-
嗯,你是不是想打电话给
.ordering(...)after a call to.xAxis(...)?如果你得到“.ordering 不是一个函数”,这意味着它要么不存在,要么你没有使用图表对象——你尝试传递给它什么都没关系。 -
肯定是图表对象,例如:
var deltaChart = dc.rowChart("#bfeDelta-chart");那么bfeDeltaChart .width(300) .height(250) .dimension(bfeDeltaDim) .group(pointsByBFEDelta) .xAxis().ticks(4) .ordering(function(d){return +d.value}); -
请查看我在上面发布的常见问题解答链接。使用
.xAxis()将返回一个不是图表的不同对象。
标签: javascript d3.js dc.js crossfilter