Я сделал изменения в значениях "x", так как я только что добавил "" для каждого элемента. Так как это не число, оно будет рассматриваться как строка
{"x":"zero","y":333},
{"x":"one","y":138},
{"x":"two","y":118}
В вашем случае вы можете просто добавить
d3.scale.ordinal().domain(data[0].values.map(function(element){
return element.x
}))
Это даст вам массив, как вы ожидали ["ноль" , "one", "two"].
Приведенное выше решение предназначено для случаев, когда у вас есть фиксированные метки x, но если вы хотите пройти 1011 * через каждый элемент, чтобы увидеть или добавить больше, вы можете использовать этот подход или для generi c решение
d3.scale.ordinal().domain(filter(data))
function filter(localData){
var tempdata = []
localData.forEach(function (element){
return element.values.forEach(function(element){
tempdata.push(element.x)
})
})
var uniqueArray = tempdata.filter(function(item, pos, self) {
return self.indexOf(item) == pos;
})
return uniqueArray
}