2016-06-30 33 views
6

sto cercando di migrare D3 da v3 a v4:{} d3.js migrazione v3 a v4: lavoro codice su v3 (d3.layout.stack()) v4 errore (d3.stack())

Leggi: https://github.com/d3/d3/blob/master/CHANGES.md#shapes-d3-shape

See: d3.layout.stackd3.stack

ho cambiato il mio codice di lavoro:

codice lavorare su v3: (d3.layout.stack())

Codice producendo errore in v4: (d3.stack())

V4:

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

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; 

Schermata del codice di lavoro in v3: screenshot working code (D3 v3)

schermo di il lavoro Codice (D3 v3) console.log (strati) screenshot console.log(layers) working code (D3 v3)

Screenshot della (D3 v4) console.log (strati) screenshot console.log(layers) (D3 v4)

+1

v3 versione https://jsfiddle.net/9y2g65qc/ – Igor

+0

pronta che mi manca nel tentativo di tradurre questo codice in v4 – Igor

+0

Sto anche avendo lo stesso problema ... – nach0

risposta

2

Risulta, in realtà è abbastanza facile.

si vuole semplicemente trasporre vostra matrice in modo che sia sembra quarantina che è vicino alla matrice di oggetti la nuova funzione di stack sta aspettando:

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); }))), 

Allora è una semplice questione di modificando i nomi in base alla nuova sintassi.

Ho aggiornato il tuo violino in modo che funzioni per v4.

vedi: https://jsfiddle.net/9y2g65qc/20/