如何在Jupyter中实现带下拉选择器的参数日Accepted量折线图?
实现交互式折线图的正确方案
先修正你代码里的问题
你的代码存在几个关键错误:
- 语法错误:
df.["data1"]多了一个点,且列名应为date 1(注意空格) - 大小写不匹配:数据中是
Accepted,你写的是accepted,会导致统计结果为0 - 未按日期分组:你只计算了全局的Accepted数量,无法绘制随日期变化的折线图
y是单个数值,折线图需要与日期对应的序列值
完整实现步骤
1. 导入依赖库
import pandas as pd import matplotlib.pyplot as plt from ipywidgets import Dropdown, interact
2. 数据预处理(含示例数据构造)
先把你提供的表格转为DataFrame,并将日期列转为datetime类型:
# 构造你的示例数据 data = { "param 1": ["Accepted", "nor Accepted", "Accepted", "not Accepted", "Accepted", "Accepted"], "param b": ["Accepted", "Accepted", "Accepted", "not Accepted", "Accepted", "Accepted"], "date 1": ["2023-06-26 09:59:09"]*6, "date 2": ["2023-06-26 09:59:09"]*6 } df = pd.DataFrame(data) # 转换日期列为datetime格式,方便后续分组统计 df["date 1"] = pd.to_datetime(df["date 1"]) df["date 2"] = pd.to_datetime(df["date 2"])
3. 编写绘图函数
该函数会根据选择的参数,按日期分组统计Accepted的数量并绘制折线图:
def plot_accepted_trend(selected_param): plt.figure(figsize=(10, 6)) if selected_param == "param 1 (基于date 1)": # 按date 1分组,统计每组中param 1为Accepted的数量 count_data = df.groupby("date 1")["param 1"].apply(lambda x: (x == "Accepted").sum()) count_data.plot(kind="line", marker="o", color="#1f77b4") plt.title("param 1中Accepted的数量趋势", fontsize=20) plt.xlabel("date 1", fontsize=15) elif selected_param == "param b (基于date 2)": # 按date 2分组,统计每组中param b为Accepted的数量 count_data = df.groupby("date 2")["param b"].apply(lambda x: (x == "Accepted").sum()) count_data.plot(kind="line", marker="o", color="#ff7f0e") plt.title("param b中Accepted的数量趋势", fontsize=20) plt.xlabel("date 2", fontsize=15) plt.ylabel("Accepted数量", fontsize=15) plt.grid(alpha=0.3) plt.tick_params(axis='both', labelsize=12) plt.show()
4. 创建交互式下拉选择器
用ipywidgets实现下拉选择功能,绑定绘图函数:
# 定义下拉选项 dropdown_options = ["param 1 (基于date 1)", "param b (基于date 2)"] # 创建下拉组件 selector = Dropdown( options=dropdown_options, value=dropdown_options[0], description="选择参数:", style={"description_width": "initial"} ) # 绑定交互 interact(plot_accepted_trend, selected_param=selector)
说明
- 运行上述代码后,Jupyter中会出现一个下拉选择框,切换选项即可查看对应参数的折线图
- 如果你的实际数据包含多个不同日期,分组统计后会自动展示随日期变化的趋势(当前示例数据日期都相同,所以是一条水平线)
内容的提问来源于stack exchange,提问作者Сергей Корягин
相关产品推荐
相关产品推荐

