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

Python中实现可按item取值筛选的Plotly直方图问题

Python中实现可按item取值筛选的Plotly直方图问题

我看你想要做一个能按item的不同取值(A、B、C、D)筛选,展示对应value分布的Plotly直方图,不过当前代码没达到预期效果,我来帮你梳理问题并修正~

原代码的问题分析

  • 你原本的直方图把dataset.item作为x轴,这其实是在统计每个item取值的出现次数,而不是每个item对应的value的分布,和你的需求不符。
  • 按钮逻辑错误:你循环的是continuous_vars(仅包含"item"列名),所以只生成了一个无效按钮,而且没有按item取值筛选对应的value数据。

修正后的代码

import pandas as pd
import plotly.graph_objects as go

dataset = pd.DataFrame(
    {'item': ['A', 'A', 'B', 'C', 'D', 'A', 'A', 'B', 'C', 'D', 'A', 'A', 'B', 'C', 'D'],
    'value': [27, 33, 3, 26, 8, 27, 3, 13, 16, 2, 27, 17, 12, 6, 28],
    }
)

# 获取item的所有唯一取值,作为筛选选项
item_options = dataset['item'].unique().tolist()

fig = go.Figure()

# 初始显示第一个item(A)对应的value分布直方图
initial_item = item_options[0]
fig.add_trace(
    go.Histogram(
        x=dataset[dataset['item'] == initial_item]['value'],
        xbins=go.histogram.XBins(size=5),  # 自定义分箱大小
        marker=go.histogram.Marker(color="orange"),  # 自定义颜色
    )
)

# 生成每个item对应的筛选按钮
buttons = []
for item_val in item_options:
    buttons.append(
        dict(
            method='restyle',
            label=item_val,  # 按钮显示item的取值(A/B/C/D)
            args=[
                {"x": [dataset[dataset['item'] == item_val]['value']]},  # 更新x轴为对应item的value数据
                [0]  # 指定更新第一个trace
            ]
        )
    )

# 配置下拉菜单
updatemenu = [
    dict(
        buttons=buttons,
        direction='down',
        showactive=True,
        active=0  # 默认选中第一个按钮(对应初始显示的item)
    )
]

fig.update_layout(
    showlegend=False,
    updatemenus=updatemenu,
    title="按Item筛选的Value分布直方图",
    xaxis_title="Value",
    yaxis_title="频数"
)

fig.show()

关键改动说明

  1. 目标数据调整:把直方图的x轴从item列改成了对应item取值的value数据,这才是你需要的分布统计。
  2. 按钮逻辑修正:遍历item的所有唯一取值生成按钮,每个按钮点击后会筛选出对应item的value数据并更新直方图。
  3. 初始状态优化:默认显示第一个item(A)的value分布,下拉菜单默认选中对应按钮,交互更直观。

备注:内容来源于stack exchange,提问作者jonboy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 11:40:28