2016-05-28 1 views
1

Я следую за Mike Bostock's example для создания горизонтальной гистограммы с положительными и отрицательными значениями.ds3.js Горизонтальная панель - Как централизовать ось y?

Я пытаюсь централизовать ось y, так что всегда есть одна и та же длина оси X с каждой стороны. Но не могу найти никаких примеров. Я хочу, чтобы шкала оси х оставалась чувствительной к данным, поэтому я не хочу указывать диапазон.

Я не могу получить пример, который он дает для работы. :

Для количественной шкалы, вычислить область данных (минимальное и максимальное значение) с использованием d3.extent:

var x = d3.scale.linear() 
    .domain(d3.extent(data, function(d) { return d.value; })) 
    .range([0, width]); 

Nicing масштаб будет немного расширить масштабы до ближайшего круглые числа. Если вы хотите, чтобы нулевое значение было , центрировано в середине холста, возьмите максимальное и минимальное значение по умолчанию или просто скопируйте нужный домен .

Любые примеры того, как правильно рассчитать домен или помочь с наилучшими пожеланиями!

ответ

2

Во-первых, давайте определить, какой из них больше, минимальное или максимальное значение:

var greater; 

if (Math.abs(d3.min(data, function(d){ return d.value})) > Math.abs(d3.max(data, function(d){ return d.value}))) { 
    greater = Math.abs(d3.min(data, function(d){ return d.value})); 
    } else { 
    greater = Math.abs(d3.max(data, function(d){ return d.value})); 
    }; 

А затем установить масштаб:

var x = d3.scale.linear() 
.domain([greater * -1, greater]) 
.range([0, width]); 
+0

Ха! кажется настолько очевидным сейчас! Большое спасибо. –

Смежные вопросы