如何调整http://bl.ocks.org/mbostock/3884955下面的代码来选择特定的列?
var line = d3.svg.line()
.x(function(d) { return x(d.date); })
.y(function(d) { return y(d.temperature); });
d3.tsv("data.tsv", function(error, data) {
color.domain(d3.keys(data[0]).filter(function(key) { return key !== "date"; }));
data.forEach(function(d) {
d.date = parseDate(d.date);
});
var cities = color.domain().map(function(name) {
return {
name: name,
values: data.map(function(d) {
return {date: d.date, temperature: +d[name]};
})
};
});
Run Code Online (Sandbox Code Playgroud)
在上面的示例中使用的数据中,有3列:3个城市的温度的日期和3列.在我的用例中,我有10列:3个城市的每个城市的日期和3个变量,即(1 + [3*3]).我想加载整个数据集(用于工具提示),但只想绘制每个城市的一个变量,它位于列索引#1,4和7中.我该怎么做?(参见下面的粗略语法).
var cities = color.domain().map(function(name) {
return {
name: name,
values: data.map(function(d) {
return {date: d.date, maxTemperature: *+d[arrays in column index 1, 4 and 7]*};
})
values2: data.map(function(d) {
return {date: d.date, minTemperature: *+d[arrays in column index 2, 5 and 8]*};
})
values3: data.map(function(d) {
return {date: d.date, avgTemperature: *+d[arrays in column index 3, 8 and 9]*};
})
};
});
Run Code Online (Sandbox Code Playgroud)
我能够通过添加过滤关键条件来排除我不想绘制图表的其他数据类别来解决这个问题。在上面使用的示例中,我有每个城市的最低、最高和平均温度,并且只想获取平均温度。我添加了过滤器,排除了带有包含“max”或“min”的字符串的列标题,如下所示。
color.domain(d3.keys(data[0]).filter(function(key)
{ return key !== "date" && key.indexOf("max") == -1 &&
key.indexOf("min") == -1; });
Run Code Online (Sandbox Code Playgroud)
我不一定知道完整的列名是什么,但在我的用例中,不同的变量总是用 max、min 或 avg 标记,这使得这对我来说是一个可行的解决方案,但可能不适合那些完全未知列标题的人。我最初想根据索引 # 选择列,但这工作得很好。
| 归档时间: |
|
| 查看次数: |
8900 次 |
| 最近记录: |