You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:45:04