【发布时间】:2015-08-28 23:34:03
【问题描述】:
我正在尝试使用一些活动跟踪器数据生成与 beautiful example 类似的 D3 流图。
我引用了这个例子 - http://jsfiddle.net/NTJPB/1/light
我的 JSFiddle - http://jsfiddle.net/Nyquist212/00war1o6/ 告诉我我的 json 格式有问题(尽管尝试在示例中对其进行建模)。
我的代码的核心看起来像这样 -
data.forEach(function(d){
parseDate = d3.time.format("%m/%d/%Y").parse;
d.date = parseDate(d.date);
d.value = Math.round(+d.value);
});
var maxval = d3.max(data, function(d){ return d.value; });
// Nest the json by key
var nest = d3.nest()
.key(function(d) { return d.key; })
.entries(data);
var margin = {top: 50, right: 50, bottom: 50, left: 50 },
width = 960 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;
var color = d3.scale.linear()
.range(["#0A3430", "#1E5846", "#3E7E56", "#6BA55F", "#A4CA64", "#E8ED69"]);
var x = d3.scale.linear()
.range([0, width])
.domain([0, data[0].length]);
var y = d3.scale.linear()
.range([height, 0])
.domain([0, maxval]);
var svg = d3.select("body").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
var stack = d3.layout.stack()
.offset("wiggle");
var layers = stack([data]);
var area = d3.svg.area()
.interpolate('cardinal')
.x(function (d, i) { return x(i); })
.y0(function (d) { return y(d.y0);})
.y1(function (d) { return y(d.y0 + d.y);});
svg.selectAll(".layer")
.data(layers)
.enter().append("path")
.attr("class", "layer")
.attr("d", function (d) {return area(d);})
.style("fill", function (d, i) {
return color(i);
});
var layers = stack([nest]);
var area = d3.svg.area()
.interpolate('cardinal')
.x(function (d, i) { return x(i); })
.y0(function (d) { return y(d.y0);})
.y1(function (d) { return y(d.y0 + d.y);});
svg.selectAll(".layer")
.data(layers)
.enter().append("path")
.attr("class", "layer")
.attr("d", function (d) {return area(d);})
.style("fill", function (d, i) {
return color(i);
});
我需要将我的数据按摩成什么首选/所需的 json 格式?这甚至是我的问题吗?
谢谢
【问题讨论】:
-
我不确定您的数据是否真的适合这种类型的可视化。如您所见,您引用的示例 JSFiddle 有一个用于数据源的二维数组。您的脚本在
data[0].length上失败,因为数组中的第一个子元素是一个对象......它没有本机length属性。您可能想退后一步,看看您想要实现的目标。 -
马特你可能是对的......但是这两个例子都使用了多系列数据。我有三组时间序列数据。每个都有一个日期戳和一个值。为什么这不适合流图?我不反对,但想了解您的推理。
标签: javascript json d3.js stream-graph