我正在编程一个工具来绘制数据并希望使用ipywidgets
更改对图形有影响的多个常数(相当复杂的方程)。小部件的数量是任意的。
但是当我将@interact
与**kwargs
一起使用时,更改仅在我更改最后一个滑块时出现(所有常数都具有相同的值)。
def plot_with_widgets(self,
constants=[
("slider", "cash.cash", 0, 10),
("checkbox", "earnings.earnings", 0, 10),
]):
scenarios = get_scenario_objects(...)
## Only store data and create widgets and pack them
log("[INFO] Creating widget objects for interactive plot of scenarios {}".format(str(scenario_names)))
# Generate the widget objects
widgets = {}
for val in constants:
widget_type = val[0]
name = val[1]
if widget_type.lower() == "checkbox":
widget = py_widgets.Checkbox(description=name, value=False, disabled=False,
style=config.configuration["slider_style"],
layout=config.configuration["slider_layout"])
elif widget_type.lower() == "slider":
start = val[2]
end = val[3]
if type(start) == float:
widget = py_widgets.FloatSlider(min=start, max=end, value=(end - start) / 2, description=name,
style=config.configuration["slider_style"],
layout=config.configuration["slider_layout"])
else:
widget = py_widgets.IntSlider(min=start, max=end, step=1, value=(end - start) / 2, description=name,
style=config.configuration["slider_style"],
layout=config.configuration["slider_layout"])
widgets[name] = widget
@interact(**widgets)
def make_plot(**kwargs):
for key, value in kwargs.items():
scenarios[key].model.somevalue = lambda t : value
call_plot_method(...)
所以发生的是该绘图(使用dataframe.plot()
)将进行绘图,但是我更改的模型的所有常数将仅采用小部件dict中最后一个元素的值。
你们中有人有使用matplotlib
并将**kwargs
用于@interact
的经验吗?