从tsv数据

时间:2015-05-03 19:01:46

标签: 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;})])
      ...

在实际数据中找到最小值和最大值。这样我就无需猜测我的比例以及数据是否会改变比例变化。

对于非数字值,我想要同样的事情。

在同一数据中,有一个“大陆”分组,我想为其着色代码。所以我正在使用category10序数量表,如下所示:

var colorRamp=d3.scale.category10()
                 .domain(["Africa","Asia"....]);

我在网上找到的所有示例都显示了使用特定值设置序数比例的域,而不是如何从数据中提取信息。

我摆弄了一下并想出了有效的方法:

var colorRamp=d3.scale.category10()
        .domain(data.map(function (d) { return d.continent; }))

我的问题是,这是最好的方法吗?还有更多d3惯用的东西吗?我错过了一些完全明显的东西吗?

1 个答案:

答案 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]的每个唯一值推断出域。

[1] D3 Ordinal Scales