D3.js 从tsv数据按顺序比例设置域
我正在使用d3js并从tsv文件加载一些数据。对于数字数据,我设置的比例如下:D3.js 从tsv数据按顺序比例设置域,d3.js,D3.js,我正在使用d3js并从tsv文件加载一些数据。对于数字数据,我设置的比例如下: var x=d3.scale.linear() .domain([d3.min(data,function(d){return + d.GERD;}),d3.max(data,function(d){return +d.GERD;})]) ... var colorRamp=d3.scale.category10() .domain(["Africa","A
var x=d3.scale.linear()
.domain([d3.min(data,function(d){return + d.GERD;}),d3.max(data,function(d){return +d.GERD;})])
...
var colorRamp=d3.scale.category10()
.domain(["Africa","Asia"....]);
在实际数据中查找最小值和最大值。这样我就不必猜测我的量表,如果数据改变,量表也会改变
对于非数值,我也需要同样的东西
在这个相同的数据中,有一个“大陆”分组,我想对其进行颜色编码。所以我用了10个有序的等级,像这样:
var x=d3.scale.linear()
.domain([d3.min(data,function(d){return + d.GERD;}),d3.max(data,function(d){return +d.GERD;})])
...
var colorRamp=d3.scale.category10()
.domain(["Africa","Asia"....]);
我在web上找到的所有示例都显示了使用特定值设置顺序标度的域,而不是如何从数据中提取该信息
我胡思乱想,想出了一个有效的办法:
var colorRamp=d3.scale.category10()
.domain(data.map(function (d) { return d.continent; }))
我的问题是,这是最好的方法吗?还有更像d3的习惯用法吗?我是否遗漏了一些非常明显的内容?一般来说,如果要定义序数比例,请根据现有数据生成一个数组,就像您建议的那样:
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]的每个唯一值推断域
[1] 这就是方法。谢谢。我在传递数据时注意到它是被分配的。但是我试图创建一个图例,发现如果我把代码放在图表之前,它就不起作用了。我想有时候我想显式地分配这个域——所以在我的技巧包中有这样的东西是很好的。