【发布时间】:2026-02-22 19:15:01
【问题描述】:
目前,我有一个 SVG,里面有多个容器,即多个较小的 svg,它们根据 json 数据中的组数呈现。如果 json 中有 5 组数据,则 5 个较小的多个容器将适合该外部 svg。
另外,如果一个容器被缩放,其他容器应该反映相同的缩放行为并且应该是同步的。这将在散点图和多线图上实现。
当前的问题是多个容器按需要呈现,但只有最后一个容器在放大时的行为是正确的。在其他容器上,当调用缩放函数时,缩放行为不正确,即认为它是散点图,刻度上的气泡和轴不放大或缩小。
1) 假设其他容器中的轴选择正确,我如何使轴也放大其他容器?
2) 无论我放大哪个容器,如何同步所有容器中的缩放行为?
代码:
d3.select(that.selector+" #svgContainer"+index)
.call(d3.behavior.zoom()
.x(that.xScale)
.y(that.yScale)
.scaleExtent([1, 10])
.on("zoom", zoomed)); /*Attaching Zoom behavior to each container id '#svgContainer0','#svgContainer1',so on.*/
function zoomed() {
that.zoomed_out = false;
that.k.isOrdinal(that.selector,"#"+this.id+" .x.axis",that.xScale);
isOrdinal(that.selector,"#"+this.id+" .x.grid",that.xScale);
isOrdinal(that.selector,"#"+this.id+" .y.axis",that.yScale);
isOrdinal(that.selector,"#"+this.id+" .y.grid",that.yScale);
that.optionalFeatures()
.plotCircle()
.label();
d3.select(that.selector)
.selectAll(".dot")
.attr("r", function (d) {
return that.sizes(d.weight)*d3.event.scale;
});
};
function isOrdinal(svg,container,scale) {
var l = container.length;
var temp = container.substr((l-7),7);
if(temp === ".x.axis") {
d3.select(svg).select(container).call(makeXAxis(options,scale));
}
else if(temp === ".y.axis") {
d3.select(svg).select(container).call(makeYAxis(options,scale));
}
};
function makeXAxis(options,xScale) {
var xaxis = d3.svg.axis()
.scale(xScale)
.ticks(options.axis.x.no_of_ticks)
.tickSize(options.axis.x.tickSize)
.outerTickSize(options.axis.x.outer_tick_size)
.tickPadding(options.axis.x.ticksPadding)
.orient(options.axis.x.orient);
return xaxis;
};
function makeYAxis(options,yScale) {
var yaxis = d3.svg.axis()
.scale(yScale)
.orient(options.axis.y.orient)
.ticks(options.axis.y.no_of_ticks)
.tickSize(options.axis.y.tickSize)
.outerTickSize(options.axis.y.outer_tick_size)
.tickPadding(options.axis.y.ticksPadding);
return yaxis;
};
【问题讨论】:
-
@Alok 不,这是一个一维图表,也包含一个 svg。不能解决我的问题。
-
看*.com/questions/14749182/…的答案可能是相关的
标签: javascript svg d3.js zooming scatter-plot