原始问题:
如何使用滑块在 bqplot 标签中设置文本?
我已经解决了这个问题并在下面显示我的答案。
新问题:
为什么会出现这种行为?bqplot 将文本公开为列表然后不允许项目分配似乎不是很疯狂吗?
我想用新的东西替换标签文本。特别是,我希望标签反映不断变化的滑块值。
在迷茫了一段时间后,我发现了这个:
要创建标签,必须将文本(以及 x 和 y 位置)作为列表给出:
label(text=['my label'])
。你不能只传递字符串:label(text='my label')
。要更新此文本,您必须替换整个列表:
my_label.text = ['new label']
。您不能只分配元素:my_label.text[0] = 'new label'
。
这是演示该行为的代码。
# Imports
import numpy as np
from bqplot import pyplot as plt
from ipywidgets import IntSlider, FloatSlider, Layout
from IPython.display import display
# Make plot and label
xs = np.linspace(0, 10, 100)
ys = np.sin(xs)
layout=Layout(width='40%', height='300px')
fig = plt.figure(layout=layout)
line = plt.plot(xs, ys)
value = 123.45678
lab = plt.label(text=['{:3.3f}'.format(value)], x=[5], y=[0.2], colors=['Red'], align='middle')
# Create and link sliders
good_slider = FloatSlider(description='good')#, min=0, max=100, step=0.001)
bad_slider = FloatSlider(description='bad')#, min=0, max=100, step=0.001)
def good_update_label(change):
lab.text = ['{:3.3f}'.format(change['new'])]
def bad_update_label(change):
lab.text[0] = '{:3.3f}'.format(change['new'])
good_slider.observe(good_update_label, 'value')
bad_slider.observe(bad_update_label, 'value')
# See what happens!
display(good_slider, bad_slider, fig)