lud*_*doo 8 zoom scale pan d3.js
我正在使用d3渲染简化的甘特图,使用d3.behavior.zoom进行平移和缩放.
x刻度是一个时间刻度(稍微修改为以列为中心日历天等)并且工作得很好,但是我在确定如何缩放/平移y刻度时遇到问题,其域是一个通常是任务列表太多不适合图表区域,所以需要平移/缩放.
有没有办法告诉默认的序数比例对缩放/平移事件做出反应,还是应该编写自定义比例?如果我需要编写自定义比例,最好是将它基于d3.scale.ordinal(让它存储整个任务列表,并仅使用可见子集作为其域),或者在d3.scale上.线性(然后实现类似于范围带的序数比例等等).
或者是否有我遗漏的东西(完全可能,因为这是我使用d3的第一个项目)?
由于已私下联系我解释我是如何做到这一点的,因此对我之前的答案略有扩展。
首先,是相关应用程序的屏幕截图,其主要工作是聚合和显示从各种来源(PowerPoint 文件、公司数据库等)收集的规划数据。

相关位是带有彩色点的右侧垂直轴,其中每个点代表项目的工作量和涉及的组织。轴上的灰色区域是 d3.js 画笔,可以平移/调整大小以实时更改图表/表格数据。
// the axis is a regular ordinal axis, with a brush
y2 = d3.scale.ordinal(),
brush = d3.svg.brush().y(y2).on('brush', brushReact),
// [...]
// brush event handler
function brushReact() {
if (tasksSlice == null)
return;
var yrb = y2.rangeBand(),
extent = brush.extent(),
s0 = Math.round(extent[0]/yrb),
s1 = Math.round(extent[1]/yrb);
if (s0 == tasksSlice[0] && s1 == tasksSlice[1])
return;
tasksSlice = [s0, s1];
inner.refresh();
}
Run Code Online (Sandbox Code Playgroud)
处理程序内部发生的事情非常简单:
我希望这能解决问题。