所以我读了一篇关于国家GDP的csv文件,我过滤掉了不想要的列和国家。现在我想知道如何从这个对象数组中提取值,并使用它们为多系列折线图创建x和y轴。这是我的代码
function country(element) {
return element.CountryName == "Brazil" ||
element.CountryName == "China" ||
element.CountryName == "Russian Federation" ||
element.CountryName == "United Kingdom" ||
element.CountryName == "United States" ||
element.CountryName == "Germany";
}
d3.csv("GDP.csv", function(d) {
return {
CountryName : d["Country Name"],
Indicator : d["Indicator Name"],
y2004 : d["2004"],
y2005 : d["2005"],
y2006 : d["2006"],
y2007 : d["2007"],
y2008 : d["2008"],
y2009 : d["2009"],
y2010 : d["2010"],
y2011 : d["2011"],
y2012 : d["2012"]
};
},
function(error, rows) {
//document.write(rows);
dataset = rows;
var filtered = dataset.filter(country);
console.log(filtered);
//Code to create axes and map keys
});
现在我有一个包含6个对象的数组,每个对象在特定命名的键上都有值。我见过的示例通常从文件的标题行读取键值,但是我将如何处理该尝试呢?
X轴是2004 - 2012年,它们是列名和键值。 Y轴是那些年份的那些值的范围。由此产生的6行是针对每个国家的。
示例I'尝试关注的是http://bl.ocks.org/mbostock/3884955
我需要解析日期吗?我不这么认为,因为我只是处理年份数字而且它们是关键值,而不是关键值。感谢。
答案 0 :(得分:2)
我会汇总我的数据,以便每个点有4个键:
{country:"Germany", indicator:"...", year:2004, value:55}
而不是每年都有钥匙。只需后续处理你的csv电话。
正如您所做的那样,确定最小/最大年份和最小/最大值。
接下来,使用[minYear,maxYear]域构建年份比例(x轴)。接下来使用[minValue,maxValue]域构建y轴的值刻度。
答案 1 :(得分:0)
D3希望使用具有相同密钥集的对象数组。如果必须,请进行预处理阶段,将数据转换为如下所示:
[
{ key: value, key2: value },
{ key: value, key2: value },
{ key: value, key2: value },
{ key: value, key2: value },
{ key: value, key2: value }
]
否则你将在D3度过一段非常糟糕的时光,因为该工具包的大部分功能编程功能都不适用于你。