使用ipywidgets控制Plotly交互式箱线图分组时更新数据报错如何解决
问题原因
报错的核心原因是FigureWidget的data属性为只读元组,不支持直接赋值列表对象,这就是触发"you cannot update data directly"错误的根源。
解决方法
仅需调整回调函数的轨迹更新逻辑即可,这里提供两种可行写法:
写法1:转换轨迹列表为元组后赋值
只需要把你原来回调函数里的g.data = gdata改为g.data = tuple(gdata)即可,修改后的完整回调代码如下:
def response_box(change): col = column.value with g.batch_update(): gdata = [] for val in df[col].unique(): groupData = df.query(f'{col} == "{val}"') gdata.append( go.Box(y = groupData['distance'], name = val) ) # 转为元组后再赋值 g.data = tuple(gdata)
写法2:先清空再逐行添加轨迹
如果担心不同版本的兼容性,也可以先清空所有现有轨迹,再逐个添加新生成的轨迹:
def response_box(change): col = column.value with g.batch_update(): # 清空所有现有轨迹 g.data = () for val in df[col].unique(): groupData = df.query(f'{col} == "{val}"') g.add_trace( go.Box(y = groupData['distance'], name = val) )
两种写法都可以实现切换下拉选项时动态更新箱线图分组的需求。
内容的提问来源于stack exchange,提问作者mic
相关产品推荐
相关产品推荐

