使用变量来调用数据集中的数据列d3.js
问题描述:
嘿,大家对不起,如果这是一个愚蠢的问题,我真的很喜欢Javascript/d3.js
。所以基本上我有一个.csv
文件,有很多国家和看起来像这样每年可为军事力量的量:使用变量来调用数据集中的数据列d3.js
year,country1,country2,country3,...
1989,192129,129312,12391,...
1990,192913,123131,12331,...
1991,123112,123123,12313,...
我已经在x轴做了一个折线图与今年和一个国家的力量使用y轴
d3.csv("data.csv", function(error, data) {
if (error) throw error;
data.forEach(function(d) {
d.Year = parseTime(d.Year);
d.NLD = +d.NLD;
});
x.domain(d3.extent(data, function(d) { return d.Year; }));
y.domain([0, d3.max(data, function(d) { return d.NLD; })]);
(NLD作为国家代码)与https://bl.ocks.org/d3noob/257c360b3650b9f0a52dd8257d7a2d73
这工作得很好,但现在我的问题是我可以让你可以放置,而不是一个变量采取其他的东西一起NLD让你可以像
var country = "NLD";
,并在它们之间轻松地更改然后再将这个变量,这样的代码看起来像这样
d3.csv("data.csv", function(error, data) {
if (error) throw error;
data.forEach(function(d) {
d.Year = parseTime(d.Year);
d.country = +d.country;
});
x.domain(d3.extent(data, function(d) { return d.Year; }));
y.domain([0, d3.max(data, function(d) { return d.country; })]);
把它在大括号一样d.{country}
对我也不起作用。
对不起,如果这个问题之前已经问过,但我不知道如何问这个,我已经搜索,找不到任何东西。
答
您可以阅读更多关于它here但基本属性访问器采取两种形式之一,如d.country
中的点访问器或d['NLD']
中的方括号访问器。使用点符号,点后的任何内容都必须是有效的属性名称。在您的代码d.country
字面上正在寻找对象d
上country
属性的值。在这种情况下,你应该做的是使用方括号访问器。在方括号存取器中,无论你放在方括号中,它评估的是被访问的属性。所以,你的代码看起来像这样
var country = 'NLD'
...
y.domain([0, d3.max(data, function(d) { return d[country]; })]);
这相当于写d['NLD']
这相当于写d.NLD
,而不是'd.country'使用'd [国家]' – richbai90
OMG的解决方案是如此简单哈哈我已经尝试过d。{country}和d。[country],但他们没有工作,但我从来没有想过d [country]。 Thans很多! –