2015-05-06 2 views
0
var taskTypes = ["slot1", "slot2", "slot3","slot4","slot1","slot2","slot6"]; 

когдаd3.js Ганта выпуск

var y = d3.scale.ordinal() 
    .domain(taskTypes) 
    .rangeRoundBands([ 0, height - margin.top - margin.bottom ], .1); 

Я делал

var rectTransform = function(d) { 
    return "translate(" + x(d.termStartDate) + "," + y(d.slotName) + ")"; 
    }; 

и это приезжающие собственно, но теперь я принимаю

var y = d3.scale.ordinal() 
    .domain(d3.range(0, taskTypes.length)) 
    .rangeRoundBands([ 0, height - margin.top - margin.bottom ], .1); 

и теперь

var rectTransform = function(d) { 
    return "translate(" + x(d.termStartDate) + "," + y(d.slotName) + ")"; 
    }; 

, где d.slotName = слот1, слот2 или слот3 или любое другое значение, y(d.slotName) возвращается неопределенным, любые предложения Как заставить его работать?

ответ

0

В соответствии с this answer доменом для шкалы y являются массивные индексы taskTypes. Это означает, что:

y("slot3") = undefined 
y(taskTypes.indexOf("slot3")) = 54 // Or some valid value 

Вам нужно определить индекс d.slotName в массиве. Использование indexOf не будет вести себя хорошо для повторяющихся значений (например, "slot1"). Если элемент присутствует несколько раз, метод indexOf возвращает позицию первого появления.

+0

привет @henry .. вы ответили на запрос по http://stackoverflow.com/questions/30049087/d3-js-need-repeated-values-on-y-axis, это продолжение той же самой вещи – sachin

+0

Привет, спасибо, я получил Идею и работал над проблемой. – sachin