Возможно ли, что мы можем указать значения тика по оси х на основе соответствующих значений y? Например, у меня есть ось x/date/time series, которая представляет даты и значения цены в качестве оси y. Я хочу показать только значения оси x для определенных значений оси y, которая зависит от пользовательского ввода.Показаны конкретные значения тика
ответ
Если значения 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.
Самый простой способ - это не нарисовать ярлыки оси 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 (и я знаю, что его очень легко запутать).
Благодарим вас за код. Скажем, например, у меня есть массив «array = [{« first »:« abc »,« second »: def»}, {"first": "hij", "second": klm "}, ... и скоро] " . Как я могу переписать ytoshow так, чтобы отображались только значения оси x, например, только «klm» (при условии, что массив изменяется каждый раз, когда пользователь вводит новое значение. Мне жаль, что я спросил больше. начинающему до D3 js и, видимо, есть чему поучиться – Linus
Тот же принцип: 'yToShow = [" klm "]; xTicks = data.filter (function (d) {return yToShow.indexOf (d.second)> -1;}) .map (function (d) {return d.first;}) ' –
Большое спасибо. Он работает как шарм :) – Linus