D3.js 当存在过渡时,如何调整d3轴属性?

D3.js 当存在过渡时,如何调整d3轴属性?,d3.js,D3.js,我使用的是d3轴组件,但我想在绘制后调整一些东西。具体地说,我希望通过向文本元素添加一个转换来旋转文本标签,并将文本锚属性从“middle”设置为“end” 我遇到的问题是,作为转换的一部分,d3代码似乎异步设置了文本锚属性。当我在代码中将该值设置为“end”时,它随后会在转换运行时被设置回“middle” 如果我等到过渡期结束后再做改变,情况会变得不稳定。我想知道的是,是否有一种方法可以将我自己插入到绘制和转换轴的过程中,以便使用我的文本锚定值而不是默认值?这似乎是API无法覆盖的。一个简单但

我使用的是d3轴组件,但我想在绘制后调整一些东西。具体地说,我希望通过向文本元素添加一个转换来旋转文本标签,并将文本锚属性从“middle”设置为“end”

我遇到的问题是,作为转换的一部分,d3代码似乎异步设置了文本锚属性。当我在代码中将该值设置为“end”时,它随后会在转换运行时被设置回“middle”


如果我等到过渡期结束后再做改变,情况会变得不稳定。我想知道的是,是否有一种方法可以将我自己插入到绘制和转换轴的过程中,以便使用我的文本锚定值而不是默认值?

这似乎是API无法覆盖的。一个简单但有黑客攻击性的解决方案是在样式表中设置它

.x.axis text {
  text-anchor: end !important;
}

这似乎是API无法覆盖的。一个简单但有黑客攻击性的解决方案是在样式表中设置它

.x.axis text {
  text-anchor: end !important;
}

我认为这构成了axis组件中的一个bug,因此我创建了一个pull请求,而不是作为axis转换的一部分。文本元素的“文本锚定”属性无法插值,因此没有理由将更新推迟到转换,立即设置它可以让您轻松地使用后期选择修复它


另一种修复方法是扩展轴组件以支持不同样式的记号标签。这样,您就不需要使用后选择,因此与轴转换没有冲突。

我认为这在轴组件中构成了一个bug,因此我创建了一个拉取请求,而不是作为轴转换的一部分。文本元素的“文本锚定”属性无法插值,因此没有理由将更新推迟到转换,立即设置它可以让您轻松地使用后期选择修复它


另一种修复方法是扩展轴组件以支持不同样式的记号标签。这样,您就不需要使用后选择,因此与轴转换没有冲突。

如果没有一些代码,这很难解决,但是您可以在转换开始处设置值,例如:selection.on(“start”,function(){label.attr(“text anchor”,“end”)})请显示一些代码。不过,我不确定是否有办法平滑地转换
文本锚定
属性,因为“中间”和“结束”之间没有中间值。我不想转换文本锚定。我只想将其设置为“end”,但d3 axis的内部将其设置为“middle”(在转换时异步)。我使用的代码只不过是一个select for all元素和一个attr()调用来设置文本锚。当d3轴在过渡中渲染时,计时是一个棘手的部分…如果没有一些代码,这很难解决,但是您可以在过渡开始时设置值,例如:selection.on(“start”,function(){label.attr(“text anchor”,“end”)})请显示一些代码。不过,我不确定是否有办法平滑地转换
文本锚定
属性,因为“中间”和“结束”之间没有中间值。我不想转换文本锚定。我只想将其设置为“end”,但d3 axis的内部将其设置为“middle”(在转换时异步)。我使用的代码只不过是一个select for all元素和一个attr()调用来设置文本锚。当d3轴在过渡中渲染时,时间是一个棘手的部分…我实际上没有意识到你可以通过样式表来设置它!它似乎工作,即使没有!很重要,所以我想样式优先于属性。不过,我不确定在所有浏览器上是否都是这样。它并不漂亮,因为现在在同一个元素上设置了两个相互矛盾的文本锚定值,但它可以工作,所以谢谢!!我真的不知道你可以通过样式表来设置它!它似乎工作,即使没有!很重要,所以我想样式优先于属性。不过,我不确定在所有浏览器上是否都是这样。它并不漂亮,因为现在在同一个元素上设置了两个相互矛盾的文本锚定值,但它可以工作,所以谢谢!!我已经在nvd3中调试了一天了,当我遇到这个问题时-结果我们使用的是2.9.2,它没有修复:)我已经在nvd3中调试了一天了,当我遇到这个问题时-结果我们使用的是2.9.2,它没有修复:)