我在D3.js v4上有一个热图,我试图给它增加缩放和平移功能。缩放只能在x轴上工作,并不会改变y轴。有关缩放部分低于:在D3.js/v4中放大热图重绘
var x = d3.scaleTime().range([0, width]).domain([minDate, maxDate]);
var xAxis = d3.axisBottom().scale(x);
var zoom = d3.zoom().scaleExtent([1, 2])
.translateExtent([[80, 20], [width, height]])
.on("zoom", zoomed);
svg.call(zoom);
function zoomed() {
xAxis.scale(d3.event.transform.rescaleX(x));
svg.select(".x.axis").call(xAxis);
update();
}
function update() {
svg.selectAll(".cell")
.attr('clip-path', 'url(#plotAreaClip)')
.attr("x", function (d) { return x(d.timestamp); })
.attr("y", function (d) { return y(d.hour); })
.attr("width", function (d) { return x(d3.timeWeek.offset(d.timestamp, 1)) - x(d.timestamp); })
.attr("height", function (d) { return y(d.hour + 1) - y(d.hour); })
.attr("fill", function (d) { return colorScale(d.value); });
}
当我真正在zoomed()
功能注释掉update()
,我可以看到,轴/出来就好放大。但是当update()
在函数中时,它只会删除图表中的所有矩形。
JS小提琴链接是https://jsfiddle.net/7z1f4c5p/(我不知道上传csv文件到JSFiddle的方法,所以我不得不把整个数据写到JS部分,对不起,代码在底部。第97行,变焦将无法正常工作。
小提琴缺少代码 –