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

Streamlit中使用st.multiselect生成分组柱状图结果不符合预期求助

问题原因
  • 你获取到multiselect的选中客户列表options后,没有对原始数据集做过滤,代码里selections/offers/joinings三个变量取的还是全量数据的对应列,和你选中的客户没有绑定关联
  • 当你选了n个客户时,x轴只有n个刻度,Plotly会默认取y轴全量数据的前n个值渲染,所以永远显示的是数据集最前面几行的数值,和你选中的客户完全不匹配
修复方案

先根据选中的options过滤原始数据,再取过滤后的数据生成图表即可,修正后的代码如下:

import streamlit as st
import plotly.graph_objects as go
import pandas as pd

data = load_data()

st.markdown('### Client Selection, Offers and Joinings')
clients = data['Client'].to_list()
options = st.multiselect('Client List', clients)
st.write(data)

# 按选中的客户过滤数据集
if options:
    filtered_data = data[data['Client'].isin(options)]
    # 按选中顺序排序,保证x轴展示顺序和选择顺序一致
    filtered_data['Client'] = pd.Categorical(filtered_data['Client'], categories=options, ordered=True)
    filtered_data = filtered_data.sort_values('Client')
else:
    # 未选择客户时默认展示全量数据,可根据需求调整逻辑
    filtered_data = data

selections = filtered_data['selections'] 
offers = filtered_data['offers']
joinings = filtered_data['joinings']

fig1 = go.Figure()
fig1.add_trace(go.Bar(
    x=filtered_data['Client'],
    y=selections,
    name='Selections',
    marker_color='indianred'
))
fig1.add_trace(go.Bar(
   x=filtered_data['Client'],
   y=offers,
   name='Offers',
    marker_color='lightsalmon'
))
fig1.add_trace(go.Bar(
   x=filtered_data['Client'],
   y=joinings,
   name='Joinings',
    marker_color='indianred'
))

fig1.update_layout(barmode='group', xaxis_tickangle=-45)
st.plotly_chart(fig1)

内容的提问来源于stack exchange,提问作者ira bajpai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:54:02