Я использую d3.js, и я работаю над графикой в матовой области, изменяя этот пример. В дополнение к изменению оси x, основанной на кисти, я хотел бы перерисовать ось y-графика, основанную на значениях y, которые попадают в кисть (аналогично поведению диаграмму Google Финансы).
Я получил функциональность, но только так, чтобы позволить кисти рисоваться как в x, так и в у-пространстве. Я сделал это, сначала добавив масштаб y к переменной brush
:
var brush = d3.svg.brush()
.x(x2)
.y(y2)
.on("brush", brush);
Это делает brush.extent()
возвращением следующего многомерного массива: [ [x0, y0], [x1, y1] ]
. Затем я использую эти данные в функции brush()
, чтобы переопределить x- и y-область для диаграммы фокусировки:
function brush() {
var extent = brush.extent();
x.domain(brush.empty() ? x2.domain() : [ extent[0][0], extent[1][0] ]);
y.domain(brush.empty() ? y2.domain() : [ extent[0][1], extent[1][1] ]);
focus.select("path").attr("d", area);
focus.select(".x.axis").call(xAxis);
focus.select(".y.axis").call(yAxis);
}
Это работает, но, определяя масштаб y в переменной щетки, пользователь теперь может перетаскивать "квадратики" на диаграмме фокуса, а не только перетаскивать с запада на восток, как в исходной диаграмме.
По существу, мой вопрос: как получить диапазон значений, попадающих в область кисти, а не в область самой области кисти? Возможно ли это?
Документацияd3 brush здесь.