2016-05-31 20 views
42

Widzę dużo kodu D3, która ma coś takiego:D3 4.0 rangeRoundBands jest odpowiednikiem?

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

Począwszy od wersji 4.0 d3.scale.ordinal() D3 jest teraz d3.scaleOrdinal i rangeRoundBands wydaje się być już nie ma.

> d3.scaleOrdinal() 

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

Co V4 równoważny D3 tego kodu (od Mike Bostock na bar chart example) być?

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

Odpowiedz

50

W D3 4.x rangeRoundBands został przeniesiony do nowej skali Kompania:

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

to odpowiednik:

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

Oto API: https://github.com/d3/d3-scale#band-scales

+8

Tak więc zamiennikiem jest 'var x = d3.scaleBand(). RangeRound ([0, width])' na końcu. Dzięki! – mikewilliamson

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

Powyższe oblicza pasma i ustawia dopełnienie między pasmem. W v4, odpowiednik jest

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

launchable składnia klasycznym wykresie używając zarówno scaleBand i scaleLinear.

Powiązane problemy