在Jupyter Notebook中统计ipywidgets IntSlider的步骤计数需求
解决方案
核心修改思路
- 替换原有
@widgets.interact装饰器,显式使用滑块组件(适配原参数的FloatSlider,若需整数步长可改用IntSlider) - 自定义合格/不合格判定规则(示例以马力≥100为合格,可按需修改)
- 用列表存储每次滑块调整的参数与计数结果,最终转为表格展示
- 同步完成可视化更新、计数计算与数据记录
完整代码
import ipywidgets as widgets from IPython.display import display, clear_output import seaborn as sns import matplotlib.pyplot as plt import pandas as pd %matplotlib inline # 加载数据集 cars = sns.load_dataset('mpg') # 初始化记录历史数据的列表 history_records = [] # 定义合格判定规则(可根据业务需求修改) def check_qualified(horsepower): return horsepower >= 100 # 示例:马力≥100标记为合格 # 创建滑块组件(若需整数滑块,替换为IntSlider并调整step、min/max为整数) bw_slider = widgets.FloatSlider( value=0.1, min=0.1, max=5.0, step=0.1, description='带宽:', continuous_update=False # 拖动时不实时触发,提升性能 ) # 创建输出组件用于展示记录表格 output_table = widgets.Output() # 定义回调函数:更新可视化+计算计数+记录数据 def update_plot_and_record(bw): # 清空当前输出,避免重复绘图 clear_output(wait=True) # 绘制KDE分布图 sns.kdeplot(cars.horsepower, lw=3, fill=True, bw_adjust=bw) plt.xlim(-20, 200) plt.ylim(0, 0.04) plt.show() # 计算合格/不合格数量 qualified_total = cars.horsepower.apply(check_qualified).sum() unqualified_total = len(cars) - qualified_total # 记录当前参数与计数结果 history_records.append({ '带宽参数(bw)': round(bw, 1), '合格样本数': qualified_total, '不合格样本数': unqualified_total }) # 在输出组件中展示历史记录表格 with output_table: clear_output(wait=True) display(pd.DataFrame(history_records)) # 绑定滑块与回调函数 widgets.interact(update_plot_and_record, bw=bw_slider) # 显示记录表格 display(output_table)
关键细节说明
- 滑块类型适配:原代码使用0.1步长的浮点参数,因此用
FloatSlider;若需整数步长,直接替换为IntSlider并调整step=1、min/max为整数范围即可 - 计数规则自定义:修改
check_qualified函数内的逻辑,比如改为horsepower.between(60, 140)来定义合格范围 - 数据持久化:如果需要将记录保存到文件,可在回调中添加
pd.DataFrame(history_records).to_csv('count_records.csv', index=False) - 性能优化:开启
continuous_update=False,仅在滑块拖动结束后触发计算,避免频繁更新导致卡顿
内容的提问来源于stack exchange,提问作者Marble_gold
相关产品推荐
相关产品推荐

