使用scala-js-d3应用更新之前过滤数据
我经常画一些相当复杂的图表。出于性能原因,我希望在应用转换之前过滤更新集 到目前为止,我的代码如下所示:使用scala-js-d3应用更新之前过滤数据,scala,d3.js,scala.js,Scala,D3.js,Scala.js,我经常画一些相当复杂的图表。出于性能原因,我希望在应用转换之前过滤更新集 到目前为止,我的代码如下所示: def showData(a: Drawable): Boolean = // [...] determines if the data point should be visible val selection: Update[Drawable] = d3.select(s"#$parentElement") .selectAll(s".$className
def showData(a: Drawable): Boolean = // [...] determines if the data point should be visible
val selection: Update[Drawable] =
d3.select(s"#$parentElement")
.selectAll(s".$className")
.data(drawables.toJSArray, (a: Drawable) => a.id.toString)
selection.enter
.append("g")
// [...] drawing of the data point
selection
.attr("display", (a: Drawable) => if(showData(a)) "block" else "hidden") // (*2)
selection
.filter((a: Drawable) => showData(a)) // This is not possible? (*1)
.transition()
.duration(600)
.ease("linear")
.attr("transform", (a: Drawable) => /* [...] */)
在应用如(*1)
所示的转换之前,是否有方法过滤要更新的数据?这些数据点中的大多数都是不可见的,因此应用这些转换是没有意义的
非常感谢任何帮助或提示
编辑:在
选择
部分期间无法进行过滤,因为这样就不会发生从可见到不可见的更改(请参见(*2)
)。对您的代码的建议:def showData(a:Drawable)=if(a.visible)true否则false
您可以写入def showData(a:Drawable)是的,当然可以。无论如何,这不是真正的代码,只是我快速编写的代码,以演示我的问题。根据代码,我猜应该在select
partGood点进行过滤,但不幸的是,我认为这在我的情况下是不可能的(我更新了我的问题)。对代码的建议:def showData(a:Drawable)=如果(a.visible)true else false
是否可以写入def showData(a:Drawable)=a.visible
啊,是的,当然。无论如何,这不是真正的代码,只是我很快写的东西,以证明我的问题。仅凭代码,我猜应该在选择
部分进行过滤。好的一点,但不幸的是,我认为这在我的情况下是不可能的(我更新了我的问题)。