2016-06-30 14 views
6

मैं से डी 3 विस्थापित करने के लिए कोशिश कर रहा हूँ v3 4 से:{d3.js} 4 से पलायन v3: v3 पर कोड काम (d3.layout.stack()) त्रुटि v4 (d3.stack())

पढ़ें: https://github.com/d3/d3/blob/master/CHANGES.md#shapes-d3-shape

देखें: d3.layout.stackd3.stack

मैं अपने काम के कोड बदल दिया है:

कोड v3 पर काम कर रहा: (d3.layout.stack())

v4 में

कोड उत्पादन त्रुटि: (d3.stack())

वी 4:

var dvstack = d3.stack(); 
var layers = dvstack(d3.range(nLocal).map(function(d,i) { ... 
console.log(dvstack); 

function stack(data) { 

var kz = keys.apply(this, arguments), 
    i, 
    m = data.length, 
    n = kz.length, 
    sz = new Array(n), 
    oz; 

for (i = 0; i < n; ++i) { 
    for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m;++j) { 
    si[j] = sij = [0, +value(data[j], ki, j, data)]; 
    sij.data = data[j]; 
    } 
    si.key = ki; 
} 

for (i = 0, oz = order(sz); i < n; ++i) { 
    sz[oz[i]].index = i; 
} 

offset(sz, oz); 
return sz; } 

layers[c].dvnum = c; 

Error: SCRIPT5007: Unable to set property 'dvnum' of undefined or null reference

वी 3: screenshot working code (D3 v3)

का स्क्रीनशॉट: v3 में काम कर कोड के

var stack = d3.layout.stack(); 
var layers = stack(d3.range(nLocal).map(function(d,i) { ... 
console.log(stack); 

function stack(data, index) { 

if (!(n = data.length)) return data; 
var series = data.map(function(d, i) { 
    return values.call(stack, d, i); 
}); 
var points = series.map(function(d) { 
    return d.map(function(v, i) { 
    return [ x.call(stack, v, i), y.call(stack, v, i) ]; 
    }); 
}); 
var orders = order.call(stack, points, index); 
series = d3.permute(series, orders); 
points = d3.permute(points, orders); 
var offsets = offset.call(stack, points, index); 
var m = series[0].length, n, i, j, o; 
for (j = 0; j < m; ++j) { 
    out.call(stack, series[0][j], o = offsets[j], points[0][j][1]); 
    for (i = 1; i < n; ++i) { 
    out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]); 
    } 
} 
return data; } 

layers[c].dvnum = c; 

स्क्रीनशॉट काम कर रहे कोड (डी 3 v3) console.log (परतों) (डी 3 v4) console.log की screenshot console.log(layers) working code (D3 v3)

स्क्रीनशॉट (परतों) screenshot console.log(layers) (D3 v4)

+1

v3 संस्करण https://jsfiddle.net/9y2g65qc/ – Igor

+0

शीघ्र कि मैं v4 – Igor

+0

मैं भी यही समस्या आ रही है में इस कोड का अनुवाद करने की कोशिश में याद आती है ... – nach0

उत्तर

2

बाहर कर देता है, यह वास्तव में काफी आसान है।

आप बस करना चाहते स्थानांतरित अपने मैट्रिक्स गया है ताकि somethings की तरह दिखता है जो ऑब्जेक्ट की श्रेणी के करीब नए स्टैक समारोह के लिए इंतज़ार कर रहा है है:

var n = 4, // number of layers 
m = 58, // number of samples per layer 
stack = d3.stack().keys([0,1,2,3]); 
stack.value(function (d, key) { 
     return d[key].y; 
}); 
var layers = stack(d3.transpose(d3.range(n).map(function() { return bumpLayer(m, .1); }))), 

तो यह एक साधारण बात है नए वाक्यविन्यास के अनुसार नामों को संशोधित करना।

मैंने आपकी पहेली को अपडेट किया ताकि यह v4 के लिए काम करे।

देखें: https://jsfiddle.net/9y2g65qc/20/