如何将Python Matplotlib的连续Slider滑块改为离散整数取值?
解决方法
方案1:使用Slider原生离散值参数(推荐)
Matplotlib 3.3.0及以上版本的Slider组件自带valstep参数,直接设置为1即可让滑块仅返回整数值,拖动时也只会停在整数刻度位置,视觉交互和返回值都符合整数要求。
仅需修改你代码中滑块初始化的部分即可:
# 调整n值的滑块添加valstep=1参数 amp_slider = Slider(amp_slider_ax, 'n', 2, 50, valinit=2, valstep=1) # 如果Freq参数也需要整数值,同样添加valstep参数 freq_slider = Slider(freq_slider_ax, 'Freq', 3, 30.0, valinit=6, valstep=1)
方案2:回调函数中强制类型转换(兼容旧版本Matplotlib)
如果你使用的是3.3.0以下的旧版本Matplotlib,不支持valstep参数,可以在滑块触发的回调函数里,把获取到的浮点值强制转换为整数后再传入计算逻辑,也能解决阶乘报错的问题:
修改你的sliders_on_changed函数即可:
def sliders_on_changed(val): # 强制将滑块返回的浮点值转为整数 n_val = int(amp_slider.val) freq_val = int(freq_slider.val) # 注意原bernstein函数的第二个参数k在函数内部循环中被重新赋值,属于冗余参数,传任意值不影响计算结果 line.set_ydata(bernstein(x, 0, n_val)) fig.canvas.draw_idle()
内容的提问来源于stack exchange,提问作者Esparterozzz
相关产品推荐
相关产品推荐

