我使用d3js并加载来自tsv文件的一些数据。对于数字数据,我正在设置这样的比例:
var x=d3.scale.linear()
.domain([d3.min(data,function(d){return + d.GERD;}),d3.max(data,function(d){return +d.GERD;})])
...
在实际数据中找到最小值和最大值。这样我就无需猜测我的比例以及数据是否会改变比例变化。
对于非数字值,我想要同样的事情。
在同一数据中,有一个“大陆”分组,我想为其着色代码。所以我正在使用category10序数量表,如下所示:
var colorRamp=d3.scale.category10()
.domain(["Africa","Asia"....]);
我在网上找到的所有示例都显示了使用特定值设置序数比例的域,而不是如何从数据中提取信息。
我摆弄了一下并想出了有效的方法:
var colorRamp=d3.scale.category10()
.domain(data.map(function (d) { return d.continent; }))
我的问题是,这是最好的方法吗?还有更多d3惯用的东西吗?我错过了一些完全明显的东西吗?
答案 0 :(得分:2)
通常,如果要定义序数比例,可以从您拥有的数据生成数组,就像您建议的那样:
var colorRamp = d3.scale.category10()
.domain(data.map(function (d) { return d.continent; }));
在您的情况下,如果您不确定数据的顺序,那么对域进行排序可能也很有价值:
var colorRamp = d3.scale.category10()
.domain(data.map(function (d) { return d.continent; }).sort(d3.ascending));
请注意,您在技术上不需要按顺序设置域;如果您明确设置数据的范围,则从传递给比例函数[1]的每个唯一值推断出域。