Подтвердить что ты не робот

D3 4.0 rangeRoundBands эквивалент?

Я вижу много кода D3, который имеет что-то вроде этого:

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

Начиная с версии D3 версии 4.0 d3.scale.ordinal() теперь d3.scaleOrdinal и rangeRoundBands, похоже, пропало.

> d3.scaleOrdinal()

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

Что бы эквивалент D3 v4 этого кода (от Mike Bostock пример гистограммы)?

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

Ответ 1

В D3 4.x rangeRoundBands был перенесен в новую шкалу диапазона:

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

Это эквивалентно:

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

Вот API: https://github.com/d3/d3-scale#band-scales

Ответ 2

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

Приведенное выше вычисляет полосы и устанавливает отступы между полосами. В v4 эквивалент равен

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

Ответ 3

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

Запускаемый синтаксис для классической диаграммы с использованием как scaleBand, так и scaleLinear.