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>
''')
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>
''')