首先,这是我在这里的第一篇文章,我不是一个非常高级的程序员。如果我不遵守Stackoferflow的规则,请告诉我。
我正在尝试使用D3为我的链接视图分配制作散点图(和数据图)。在我的x轴上,我将有几年,在Y轴上,我想要某个国家的预期寿命。该国家/地区将成为变量并传递到创建散点图的函数中(通过单击数据图)。
我的数据集如下所示:
[{"country":"Abkhazia","1995":null,"1996":null,"1997":null,"1998":null,"1999":null,"2000":null,"2001":null,"2002":null,"2003":null,"2004":null,"2005":null,"2006":null,"2007":null,"2008":null,"2009":null,"2010":null,"2011":null,"2012":null,"2013":null,"2014":null,"2015":null,"2016":null},
{"country":"Afghanistan","1995":49.4,"1996":49.7,"1997":49.5,"1998":48.6,"1999":50,"2000":50.1,"2001":50.4,"2002":51,"2003":51.4,"2004":51.8,"2005":52,"2006":52.1,"2007":52.4,"2008":52.8,"2009":53.3,"2010":53.6,"2011":54,"2012":54.4,"2013":54.8,"2014":54.9,"2015":53.8,"2016":52.72},
etc.
我的功能是这样开始的:
function makeScatter(lifeExpectancy, healthPercGDP, country){...
我希望拥有所有键值对的数组或词典或所有值(我认为我可以同时工作)属于传递给我的函数的国家(例如阿富汗)。
提前致谢!
答案 0 :(得分:1)
鉴于您的数据结构,一种简单的方法就是过滤makeScatter
函数内的数据数组。
function makeScatter(country) {
var filteredData = data.filter(d => d.country === country);
}
这是一个演示,请检查控制台:
var data = [{
"country": "Abkhazia",
"1995": null,
"1996": null,
"1997": null,
"1998": null,
"1999": null,
"2000": null
}, {
"country": "Afghanistan",
"1995": 49.4,
"1996": 49.7,
"1997": 49.5,
"1998": 48.6,
"1999": 50,
"2000": 50.1,
"2001": 50.4
}, {
"country": "Angola",
"1995": 59.4,
"1996": 59.7,
"1997": 39.5,
"1998": 58.6,
"1999": 60,
"2000": 60.1,
"2001": 60.4
}];
function makeScatter(country) {
var filteredData = data.filter(d => d.country === country);
console.log(filteredData);
}
makeScatter("Afghanistan")

然而,这里存在一个潜在的问题:在D3中,"输入" selection包含与传递给data()
函数的数组一样多的元素。现在,这个filteredData
数组只有一个对象,这意味着你在输入选择中只有一个元素。
因此,我的建议是这样的:在过滤你的国家之后,在一个对象数组中转换那个巨大的对象(每个对象都有year
和expectancy
属性),这里名为{{1} }:
countryData
以下是演示:
function makeScatter(country) {
var filteredData = data.filter(d => d.country === country);
countryData = [];
for (var prop in filteredData[0]) {
countryData.push({
year: +prop,
expect: filteredData[0][prop]
})
}
}