D3.js D3-尝试基于元素名称而不是值进行嵌套
我不确定这是否可行,但我正在尝试创建一个d3.nest对象,其键是一个元素名,而不是该元素的值。这将用于堆叠面积图中 以下是示例原始数据:D3.js D3-尝试基于元素名称而不是值进行嵌套,d3.js,D3.js,我不确定这是否可行,但我正在尝试创建一个d3.nest对象,其键是一个元素名,而不是该元素的值。这将用于堆叠面积图中 以下是示例原始数据: { "_id" : { "month" : 2, "day" : 26, "year" : 2014 }, "total" : 34492, "failed" : 1, "skippe
{
"_id" : {
"month" : 2,
"day" : 26,
"year" : 2014
},
"total" : 34492,
"failed" : 1,
"skipped" : 0
}
我想基于总的、失败的和跳过的元素名称,而不是它们的值(即:不是数字),创建一个嵌套对象
生成的嵌套对象类似于:
[
{
key: "total",
values: [
{
"date": "2014-02-26T05:00:00.000Z",
"count": 34492
},
{
"date": "2014-02-27T05:00:00.000Z",
"count": 34495
}
]
},
{
key: "failed",
values: [
{
"date": "2014-02-26T05:00:00.000Z",
"count": 1
},
{
"date": "2014-02-27T05:00:00.000Z",
"count": 0
}
]
}
]
我对原始数据的布局有一些控制,因此我尝试在状态对象下添加总计、失败和跳过的元素,但这也不起作用
以下是我正在使用的一些代码:
data.result.forEach(function(d) {
d.date = new Date(d._id.year, d._id.month-1, d._id.day);
d.status = {
"total": d.total,
"failed": d.failed,
"skipped": d.skipped
};
});
var nested = d3.nest()
.key(function(d) { return d.status; })
//.key(function(d) { return d.total; })
//.key(function(d) { return d.failed; })
//.key(function(d) { return d.skipped; })
.entries(data.result);
谢谢您的帮助。这不是d3.nest的工作,但肯定可以完成 如果要根据分组变量(或多个嵌套组)将长数组拆分为多个子数组,则使用嵌套函数。原始数组中的每个元素仅显示在一个子数组中 您希望将相同的数据对象数组重复三次,每次提取不同的值 从原始步骤开始解析日期值:
data.result.forEach(function(d) {
d.date = new Date(d._id.year, d._id.month-1, d._id.day);
});
然后创建一个包含不同状态类型的数组,这些状态类型可以作为单独的数据系列。您可以通过查看对象键从数据创建此数组,但我在这里假设您知道选项应该是什么:
var statusTypes = ["total", "failed", "skipped"];
然后使用嵌套
statusTypes
数组中的每个值创建一个新数组,该数组由单独的数据系列组成;及var dataSeries = statusTypes.map( function(type) {
//for each type, create a mapped version of the data array
return data.result.map( function(d) {
//for each entry in the data array,
//create a new data object based on the
//specific type of count
return { date: d.date,
count: d[type]
};
} );
});
您是否可以使用它生成一个更嵌套的结构,如下所示:var layers=[{“name”:“total”,“values”:[{“date”:Sun Mar 02 2014 00:00:00 GMT-0500(东部标准时间),“count”:91},{“date”:Mon Mar 03 2014 00:00:00 GMT-0500(东部标准时间),“count”:290}];我正在玩弄它,但我以前从未使用过map。
map
只是创建一个新数组,其中每个元素都是在原始数组的相应元素上运行函数的结果。如果希望每个元素都是一个对象,而不仅仅是子数组,那么只需确保这是从外部映射函数返回的内容:function(type){var o={};o.name=type;o.values=/*内部映射函数*/;return o;}