我有一个具有以下结构的csv,我想在d3中创建一个多行图表:
date,value1,value2,value3
1924-01-01,433.57,16.21,122.09
1925-01-01,247.68,18.55,115.38
为此,我需要获得以下结构:
date,category,n
1924-01-01,value1,433.57
1924-01-01,value2,16.21
1924-01-01,value3,122.09
1925-01-01,value1,247.68
1925-01-01,value2,18.55
1925-01-01,value3,115.38
我尝试过不同的方法,但没有成功。例如:
d3.csv("data.csv",function(data) {
var values = ['value1','value2','value3']
var nestedData=d3.nest()
.key(function(d) {return d.values;})
.sortKeys(d3.ascending)
.entries(data)
我做错了什么?
提前谢谢。
答案 0 :(得分:0)
d3.nest()
,This example与您正在寻找的完全相同。那里的数据结构与你的相同(除了它的标签而不是以逗号分隔):
date New York San Francisco Austin
20111001 63.4 62.7 72.2
20111002 58.0 59.9 67.7
20111003 53.3 59.1 69.4
这是示例中进行数据转换的代码(为了解释而添加注释):
// get the names of all the different series (everything that's not called "date")
color.domain(d3.keys(data[0]).filter(function(key) { return key !== "date"; }));
// parse the dates
data.forEach(function(d) {
d.date = parseDate(d.date);
});
// restructure the data
var cities = color.domain().map(function(name) {
// for each series, create an object with its name and its values
return {
name: name,
// extract the value for the series we're processing at the moment from the data
values: data.map(function(d) {
return {date: d.date, temperature: +d[name]};
})
};
});
使用此代码时,您唯一需要更改的是日期格式。您可能还想更改变量名称,以明确您正在处理的内容。