我有一个开发问题。我需要使用ipython-widgets在Python中从下拉菜单中同时选择多个项目。到目前为止,我能够选择一个单选框小部件菜单中的选项,选择后会绘制相应的统计数据。我已经贴出了我的代码,如果你能帮助我解决这个问题,我将不胜感激。
import numpy as np
import pandas as pd
import ipywidgets as widgets
import matplotlib.pyplot as plt
import panel as pn
pn.extension()
classes= widgets.Dropdown(
description='Products:',
options= list(output_table.class_m.unique())
)
start_year = widgets.BoundedFloatText(
value=output_table.year.min(),
min=output_table.year.min(),
max=output_table.year.max(),
step=1,
description='Start Year:',
disabled=False,
color='black'
)
end_year = widgets.BoundedFloatText(
value=output_table.year.max(),
min=output_table.year.min(),
max=output_table.year.max(),
step=1,
description='End Year:',
disabled=False,
color='black'
)
output=widgets.Output()
def response(name, start, end):
name = classes.value
output.clear_output()
df2 = output_table.copy()
# Filter between min and max years (inclusive)
df2 = df2[(df2.year >= start) & (df2.year <= end)]
with output:
if len(df2) > 0:
plot1 = df2[df2['class_m'] == name].groupby(['month']).agg({'units':'sum'}).reset_index()
plot1.plot(x='month', y='units')
clear_output(wait=True)
plt.show()
else:
print("No data to show for current selection")
def event_handler(change):
response(change.new, start_year.value, end_year.value)
def start_year_handler(change):
response(classes.value, change.new, end_year.value)
def end_year_handler(change):
response(classes.value, start_year.value, change.new)
classes.observe(event_handler, names='value')
start_year.observe(start_year_handler, names = 'value')
end_year.observe(end_year_handler, names = 'value')
display(classes)
display(start_year)
display(end_year)