Altair 是否有 "play button" 滑块?

does altair have a "play button" for sliders?

x = np.arange(100)
t = np.arange(100)
y = [p**2 for p in x]
source = pd.DataFrame({
  't':t,
  'x': x,
  'f(x)': y
})


slider = alt.binding_range(min=int(min(t)), max=int(max(t)), step=1)
select_t = alt.selection_single(name="year", fields=['t'],
                                   bind=slider, init={'year': 50})



alt.Chart(source).mark_line(point=True).encode(
    alt.X('x',scale=alt.Scale(domain=(0,100))),
    alt.Y('f(x)',scale=alt.Scale(domain=(0,10000)))
).add_selection(select_year).transform_filter(select_t)

所以我将一个简单的动画点放在一起,并且我有滑块 运行ning ok。但我希望它自动 运行 。这可能吗?

不,目前没有任何直接的方法可以在 Altair 中自动化滑块或制作动画。 Vega(Altair 的渲染器)中的动画 have been discussed,但尚未添加到实现中。

以下是添加播放按钮以播放滑块的方法。

HTML('''
<button onclick="play()">Play</button>
<script>
var timer;

function play(){
  // restart if max
  slider = document.querySelector("input[type=range]")
  if (slider.value==slider.max) {
    slider.value = slider.min
    slider.dispatchEvent(new Event("input"))
  }
  timer = setInterval(step, 200)  // change speed here
}

function step(){
  slider = document.querySelector("input[type=range]")
  slider.stepUp()  // use defult step 
  slider.dispatchEvent(new Event("input"))
  if (slider.value==slider.max){
    clearInterval(timer)
  }
}
</script>
''')