Atualize o eixo y de um gráfico de área escovado
Estou usando d3.js e estou trabalhando em um gráfico de área escovado modificandoeste exemplo. Além da mudança do eixo x baseada no pincel, eu gostaria que o eixo y do gráfico fosse redesenhado, com base nos valores y dos dados que estão no pincel (semelhante ao comportamento deum gráfico do Google Finance).
Eu obtive a funcionalidade funcionando, mas apenas de uma maneira que permite que o pincel seja desenhado em ambos os espaços xey. Eu fiz isso primeiro adicionando uma escala y aobrush
variável:
var brush = d3.svg.brush()
.x(x2)
.y(y2)
.on("brush", brush);
Isto fazbrush.extent()
retorne o seguinte array multidimensional:[ [x0, y0], [x1, y1] ]
. Eu então uso esses dados nobrush()
função para redefinir o domínio xey para o gráfico de foco:
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);
}
Isso funciona, mas definindo a escala y na variável de pincel, o usuário agora pode arrastar 'caixas' no gráfico de foco, em vez de apenas arrastar o oeste para o leste, como no gráfico original.
Essencialmente, minha pergunta é:Como faço para obter o intervalo de valores que se enquadram na área de um pincel, em vez do intervalo da própria área do pincel? Isso é possível?
documentação do pincel do d3 éAqui.