如何基于不同DataFrame实现Streamlit Multiselect过滤器控制图表显示?
解决Streamlit多选择过滤器动态控制图表显示的问题
你现在的核心问题是multiselect的选择结果没有关联到图表的轨迹添加逻辑,导致不管选什么都会显示三个平台的数据。下面是修改后的完整代码,通过动态映射+循环遍历选择项实现按需添加/移除图表:
import streamlit as st import plotly.graph_objects as go # 假设你已定义好 facebook_df、twitter_df、linkedin_df 三个DataFrame # 以及 select 变量(比如是用户选择的统计指标,例如"Impressions") socio_media = ['facebook','twitter','linkedin'] options = st.multiselect('Compare your social media platform', options = socio_media, default=socio_media) # 建立平台与对应DataFrame、显示名称的映射,统一管理避免重复代码 platform_mapping = { 'facebook': (facebook_df, 'Facebook'), 'twitter': (twitter_df, 'Twitter'), 'linkedin': (linkedin_df, 'LinkedIn') } fig = go.Figure() # 根据用户选择的平台动态添加图表轨迹 for platform in options: target_df, display_name = platform_mapping[platform] fig.add_trace(go.Scatter( x=target_df['Date'], y=target_df[select], name=display_name, mode='markers' )) fig.update_layout( title= f'{select} Over Time', xaxis=dict(title='Date'), yaxis=dict(title= select) ) st.plotly_chart(fig, use_container_width=True)
修改说明:
- 新增
platform_mapping字典:把平台标识、对应数据集、图表显示名绑定在一起,后续新增平台只需扩展字典,不用重复写轨迹代码。 - 循环处理选择项:只对用户选中的平台添加轨迹,未选中的平台不会出现在图表中,完美实现"添加/移除"的交互效果。
- 优化标题写法:用f-string替代字符串拼接,代码更简洁易读。
内容的提问来源于stack exchange,提问作者Dushu
相关产品推荐
相关产品推荐

