2016-05-31 11 views
42

Vedo un sacco di codice D3 che ha qualcosa di simile:D3 4.0 rangeRoundBands equivalenti?

var x = d3.scale.ordinal() 
    .rangeRoundBands([0, width], .1); 

partire dalla versione 4.0 D3 d3.scale.ordinal() è ora d3.scaleOrdinal e rangeRoundBands sembra essere andato.

> d3.scaleOrdinal() 

{ 
    [Function: scale] 
    domain: [Function], 
    range: [Function], 
    unknown: [Function], 
    copy: [Function] 
} 

Cosa sarebbe il v4 equivalente D3 di questo codice (da Mike Bostock di bar chart example) essere?

var x = d3.scale.ordinal() 
    .rangeRoundBands([0, width], .1); 

risposta

50

In D3 4.x rangeRoundBands è stato spostato alla nuova scala Banda:

d3.scaleBand() 
    .range([range]) 
    .round([round]); 

Questo è equivalente a:

d3.scaleBand() 
    .rangeRound([range]); 

Ecco l'API: https://github.com/d3/d3-scale#band-scales

+8

Quindi la sostituzione è 'var x = d3.scaleBand(). RangeRound ([0, width])' alla fine. Grazie! – mikewilliamson

35
var x = d3.scale.ordinal() 
    .rangeRoundBands([0, width], .1); 

Quanto sopra calcola le bande e imposta il riempimento tra le bande. In v4, l'equivalente è

var x = d3.scaleBand() 
    .rangeRound([0, width]) 
    .padding(0.1); 
-2
var svg = d3.select("svg"), 

margin = {top: 20, right: 20, bottom: 30, left: 60}, 
width = +svg.attr("width") - margin.left - margin.right, 
height = +svg.attr("height") - margin.top - margin.bottom; 

var x = d3.scaleBand().rangeRound([0, width]).padding(0.1), 
    y = d3.scaleLinear().rangeRound([height, 0]); 

var g = svg.append("g") 
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); 

d3.tsv("data.txt", function(d) { 
    d.y = +d.y; 
    return d; 
}, function(error, data) { 
    if (error) throw error; 

    x.domain(data.map(function(d) { return d.x; })); 
    y.domain([0, d3.max(data, function(d) { return d.y; })]); 

Una sintassi launchable per un grafico classica utilizzando sia scaleBand e scaleLinear.