You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用seaborn与ipywidgets制作交互式条形图

代码修正方案

你现有代码的报错主要由列名拼写错误、硬编码年份长度不匹配两个核心问题导致,按以下方式调整即可实现预期效果:


完整可运行代码

import ipywidgets as widgets
from ipywidgets import interact  
import pandas as pd  
import matplotlib.pyplot as plt 
import seaborn as sns  
import numpy as np  

# 初始化数据集
data = {'Name':['Tom', 'Nick', 'Chris', 'Jack'],
        'Age':['20-25', '19<', '>75', '20-25'], 
        'Year':[2019,2019,2018,2018]} 
df = pd.DataFrame(data)

# 自动生成去重后的年龄区间选项,不用手动维护
age_options = sorted(df['Age'].unique())

@interact(Age = age_options)
def draw_plot(Age):
    # 用正确的大写Age列名筛选,分组后直接统计人数,不需要额外Count列
    filtered_df = df[df['Age'] == Age].groupby('Year', as_index=False).size()
    # 重命名统计列,方便绘图调用
    filtered_df.rename(columns={'size':'参赛人数'}, inplace=True)
    # 兼容空数据场景,避免绘图报错
    if filtered_df.empty:
        print("当前年龄区间无参赛记录")
        return
    sns.barplot(x="Year", y="参赛人数", data=filtered_df)
    plt.show()

关键修改说明

  • 修正了列名拼写错误:原代码误用小写age,数据集实际字段为大写Age
  • 移除硬编码年份逻辑:分组统计后自动保留存在参赛记录的年份,不会出现长度不匹配的报错
  • 自动生成年龄选项:通过df['Age'].unique()自动提取去重后的年龄区间,不需要手动维护列表,适配真实场景下的大量数据
  • 去掉冗余的Count列:用groupby.size()直接统计每个年份的参赛人数,逻辑更简洁
  • 增加空数据兼容逻辑:如果选中的年龄区间没有参赛记录会给出提示,不会抛出异常

内容的提问来源于stack exchange,提问作者Harleens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:36:03