2014-10-21 3 views
1

Возможно ли, что мы можем указать значения тика по оси х на основе соответствующих значений y? Например, у меня есть ось x/date/time series, которая представляет даты и значения цены в качестве оси y. Я хочу показать только значения оси x для определенных значений оси y, которая зависит от пользовательского ввода.Показаны конкретные значения тика

ответ

0

Если значения y, которые пользователь может указать, отображаются в самих данных, и поэтому вы можете получить соответствующие значения x напрямую, это легко. Все, что вам нужно сделать, это фильтр, от ваших исходных данных, все, что не имеет значения ау запрошенное и извлечь координаты х:

var data = [[1,1], [2,2], [3,4], [4,1]]; 

var yToShow = [1, 2], 
    xTicks = data.filter(function(d) { return yToShow.indexOf(d[1]) > -1; }) 
       .map(function(d) { return d[0]; }); 

Затем вы можете использовать .tickValues() function установить эти галочки в явном виде:

xAxis.tickValues(xTicks); 

Полная демо-версия here.

+0

Благодарим вас за код. Скажем, например, у меня есть массив «array = [{« first »:« abc »,« second »: def»}, {"first": "hij", "second": klm "}, ... и скоро] " . Как я могу переписать ytoshow так, чтобы отображались только значения оси x, например, только «klm» (при условии, что массив изменяется каждый раз, когда пользователь вводит новое значение. Мне жаль, что я спросил больше. начинающему до D3 js и, видимо, есть чему поучиться – Linus

+0

Тот же принцип: 'yToShow = [" klm "]; xTicks = data.filter (function (d) {return yToShow.indexOf (d.second)> -1;}) .map (function (d) {return d.first;}) ' –

+0

Большое спасибо. Он работает как шарм :) – Linus

0

Самый простой способ - это не нарисовать ярлыки оси x или скрыть их. Затем используйте функции enter() и data() для добавления меток вручную. Вам нужно решить, где поставить ярлыки заранее и передать только результаты в data(). Вот дурацкая шаткая непроверенного пример коды фрагмент штуковина:

d3.select("#myGraph .xAxis").selectAll("g") 
    .data([1, 3, 13, 1355, 4678, 9999]) 
    .enter().append("g") 
     .attr("y", - this.graphHeight) # put them all at the bottom 
     .attr("x", function(d) {return d;}) 
     .append("text").text(function(d) {return d;}) 

«d» в приведенном выше примере является в настоящее время итерироваться элементом из массива, переданный в данные(). Вы также можете передавать объекты JS и получать доступ к их атрибутам. Таким образом, вы можете передавать свои собственные ярлыки или тому подобное.

Альтернативно создайте график, как обычно. Затем клонируйте одну из меток по оси x и удалите все метки. Разбирайте данные вручную вне областей ввода() и создавайте клоны метки, используя ее в качестве шаблона. Вы все равно можете манипулировать отдельными x-позициями и содержимым текста. Этот способ проще, если вы не привыкли к D3 API (и я знаю, что его очень легко запутать).