在Plotly(Python)中如何通过按钮更新直方图的nbins分箱数
解决方案
问题原因
nbinsx属于直方图轨迹(data数组中元素)的属性,不属于layout属性,不需要写figure.data[0]这类层级路径,也不能放到args的第二个layout修改字典中- Plotly的
update按钮方法的args参数结构为:[<轨迹属性修改字典>, <布局属性修改字典>],所有轨迹相关配置要放在第一个字典里
修改方案
你可以先为不同列配置对应的分箱数,再在按钮的第一个参数中新增nbinsx配置即可,完整可运行代码如下:
import pandas as pd import plotly.express as px dataset = pd.DataFrame( {'age': [19, 18, 28, 33, 32], 'bmi': [27.9, 33.77, 33.0, 22.705, 28.88], 'children': [0, 1, 3, 0, 0]} ) # 可自定义每列对应的分箱数 nbins_map = { 'age': 100, 'bmi': 20, 'children': 5 } fig = px.histogram(x = dataset['age'], nbins = nbins_map['age']) fig.update_layout(xaxis_title = 'age') buttons = [] for column in dataset.columns: buttons.append( dict( args = [ # 第一个字典:修改轨迹属性,新增nbinsx配置即可 {'x': [dataset[column]], 'nbinsx': nbins_map[column]}, # 第二个字典:修改布局属性 {'xaxis.title': column}, ], label = column, method = 'update', ) ) fig.update_layout( updatemenus = [ dict(type = 'buttons', buttons = buttons, direction = 'right', x=1, y=1.15) ], title_text = 'Histograms' ) fig.show()
补充说明
- 如果你不需要为每列单独配置分箱数,直接把
nbinsx的值改成固定数值即可,比如'nbinsx': 10 - 如果存在多条轨迹,可在args第一个字典中对应指定每条轨迹的属性,单个轨迹场景直接写属性名即可生效
内容的提问来源于stack exchange,提问作者Ilija Vishinov
相关产品推荐
相关产品推荐

