Я добавил сюда Plunker , если вы выберете команда 2 в раскрывающемся списке домен будет установлен на 9, а не на то, что я ожидал, а это 10.

В документации говорится следующее о nice()

Расширяет домен так, чтобы он начинался и заканчивался хорошими круглыми значениями.

И далее, если у вас есть динамический домен, он говорит:

При желании после установки нового домена вы должны заново отрегулировать масштаб.

Как мне этого добиться? Я думал, что наличие .domain().nice() в моей функции обновления исправит это? Или это как-то проблема с плавающей запятой, поскольку все числа в javascript - это 64-битные числа с плавающей запятой?

1
Robert Andersson 19 Июн 2018 в 10:41

1 ответ

Лучший ответ

9 - круглое число!

Если вы посмотрите на исходный код, вы увидите, что "округление" просто использует interval.floor и interval.ceil:

domain[i0] = interval.floor(x0);
domain[i1] = interval.ceil(x1);

Это объект interval:

{
  floor: function(x) { return pows(Math.floor(logs(x))); },
  ceil: function(x) { return pows(Math.ceil(logs(x))); }
}

С другой стороны, если вы хотите округлить до ближайших десяти, просто выполните:

xO.domain([0, 
    Math.ceil(d3.max(data, d => Math.max(
        d["old" + input], d["new" + input]
    ))/10)*10
]).nice();

Вот обновленный Plunker: https://plnkr.co/edit/8rFeodCk0Jj74JT5osJy?p= / а>

2
Gerardo Furtado 19 Июн 2018 в 12:04