Я пытаюсь нарисовать ряд вертикальных линий на диаграмме d3. Источником данных для этого является список позиций x (в данных), который отображается через масштабную функцию x()
, чтобы дать правильное положение.Вертикальные/горизонтальные линии с данными в d3
В настоящее время это реализовано как цикл for
для каждой записи в переменной labels
. Начало и конечная точка y взяты из данных minY
и maxY
. Текстовая метка прикреплена к концу строки.
labels = [
{
'x':50,
'label':test'
}
var label = svg.append("g")
.attr("class","ilabel")
// Labels
for (var i = 0; i < labels.length; i++) {
labl = labels[i];
label.append('line')
.attr('x1', x(labl.x))
.attr('y1', y(maxY))
.attr('x2', x(labl.x)
.attr('y2', y(minY))
.attr("class","ilabel-line");
label.append("text")
.attr("transform", "translate(" + x(labl.x)+"," + y(maxY)+ ") rotate(-60)")
.style("text-anchor", "start")
.attr("dx", ".5em")
.attr("class","ilabel-label")
.text(labl.label);
}
Как бы переписать это таким образом, управляемые данные т.е. проходящей метку в качестве .data
затем итерация по этому поводу провести ряд параллельных вертикальных линий.
var label = svg.selectAll(".ilabel")
.data(labels)
.enter().append("g")
.attr("class","ilabel")
бит у меня проблемы при получении моей головы вокруг является x()
и y()
функции. x()
должен, естественно, возвращать позицию x линии (которая является постоянной для данной строки), но как/что должна вернуть функция y, чтобы нарисовать линию между двумя определенными точками (minY
& maxY
).
line = d3.svg.line()
.x(function(d) { return x(d.x); })
.y(function(d) { return y(d.y); });
label.append('path')
.attr("d", line)
Я чувствую, что мне не хватает чего-то очевидного.
я не выбрала, чтобы использовать ось клещей, как (насколько я мог см.), которые также изменят положение на шкале клещей на оси. Но спасибо за предложение, привело меня к решению! – mfitzp