我在水平条形图上有两个x轴,当它们被创建时,它们都被赋予一个垂直平移它的变换(.attr('transform', 'translate(0,' + (height - 5) + ')');
)。删除数据点后,图表会缩小,这会更改高度变量,这显然会更改变换。如果我尝试添加转换,则不会发生任何事情。它不仅没有动画,但它甚至没有设置变换。没有动画,它至少会设置转换(太早了,所以看起来很奇怪,因为其他一切都在缩小)。
以下是相关代码:
chart.select('.x-axis.top').transition().duration(1500)
.attr('transform', 'translate(0,' + (height - 5) + ')');
同样,如果我只删除.transition().duration(1500)
,则转换至少仍会发生变化。
在修改Lars Kotthoff's jsfiddle以匹配我正在处理的代码时,我发现了问题所在。基本上就是这样:
svg.select('.x-axis')
.transition().duration(1500).attr("transform", "translate(0,100)");
svg.select('.x-axis')
.transition().duration(1500).call(axis);
为了设置轴的刻度,我在更新数据后运行.call(axis)
。使用该代码片段显然我应该尝试将.call(axis)
添加到第一个调用的结尾,当然之后它会起作用。
这个例子显然有点人为;在代码中我一直在研究一些逻辑(当图表首次初始化时基本上只是关闭一些转换),将两个函数分开。
我考虑过回答我自己的问题,但是虽然修复非常快速且明显,但我仍然认为第二次调用应该阻止第一次调用正常工作,这很奇怪。所以问题仍然存在,我想,为什么这似乎不起作用,而不仅仅是如何解决它。这是显示问题的updated jsfiddle。