D3.js NVD3在多组图表中重用值
有没有办法告诉NVD3/D3对第一个数据集使用的后续数据集使用相同的X值?看看下面的例子D3.js NVD3在多组图表中重用值,d3.js,nvd3.js,D3.js,Nvd3.js,有没有办法告诉NVD3/D3对第一个数据集使用的后续数据集使用相同的X值?看看下面的例子 var testdata = [ { "key" : "Quantity" , "bar": true, "values" : [ [ 1136005200000 , 1271000.0] , [ 1138683600000 , 1271000.0] , [ 1141102800000 , 1271000.0] , .... }, { "key" : "Price
var testdata = [
{
"key" : "Quantity" ,
"bar": true,
"values" : [ [ 1136005200000 , 1271000.0] , [ 1138683600000 , 1271000.0] , [ 1141102800000 , 1271000.0] , ....
},
{
"key" : "Price" ,
"values" : [ [ 1136005200000 , 71.89] , [ 1138683600000 , 75.51] , [ 1141102800000 , 68.49] , [....
}
请注意,第一个坐标(我称之为x值)在第二个数据集中每次都是如何重复的。如果它对每个数据集使用相同的X值,为什么不重用它呢?这简直是浪费。特别是对于大量数据和许多数据集/组。或者也许有什么我看不到或不明白的。任何帮助都将不胜感激
示例数据片段取自
一般来说,您的问题的答案是否定的。D3的主要假设之一是数据定义了显示的内容。也就是说,数据是自包含的。如果要引用其他数据位,则违反此假设 也就是说,您可以有如下数据结构:
var testdata = {
"time" : [ 1136005200000, 1138683600000, ... ],
"values" : [{
"key": "Quantity",
"values": [ 1271000.0, 1271000.0, ... ]
}, {
...
}]
};
然后,您将能够定义这样的线生成器
var line = d3.svg.line()
.x(function(d,i) { return xScale(testdata.time[i]); })
.y(function(d) { return yScale(d); });
d3.selectAll("path").data(testdata.values)
.enter().append("path")
.attr("d", function(d) { return line(d.values); });
你会像这样使用它
var line = d3.svg.line()
.x(function(d,i) { return xScale(testdata.time[i]); })
.y(function(d) { return yScale(d); });
d3.selectAll("path").data(testdata.values)
.enter().append("path")
.attr("d", function(d) { return line(d.values); });
这样可以避免重复定义x值。缺点是您需要显式地索引到testdata.time
,这使得代码更难维护,更不容易理解