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

如何在Streamlit中动态切换Plotly图表?

Streamlit 实现按钮切换图表的方法

核心思路

用Streamlit的st.button()创建性别选择按钮,搭配st.columns()划分页面布局,根据按钮点击状态动态渲染对应性别的Plotly图表。

完整代码示例

import streamlit as st
import plotly.express as px
import pandas as pd

# 模拟性别数据(实际项目替换为你的真实数据)
female_data = pd.DataFrame({
    "类别": ["A", "B", "C", "D"],
    "数值": [23, 45, 12, 30]
})

male_data = pd.DataFrame({
    "类别": ["A", "B", "C", "D"],
    "数值": [35, 22, 40, 18]
})

# 划分左右列布局,左侧放图表,右侧放按钮
col1, col2 = st.columns([2, 1])

# 在右侧列设置按钮区域
with col2:
    st.subheader("选择性别")
    female_clicked = st.button("Female")
    male_clicked = st.button("Male")

# 在左侧列根据按钮状态渲染图表
with col1:
    st.subheader("数据图表")
    if male_clicked:
        # 生成男性数据的柱状图
        fig = px.bar(male_data, x="类别", y="数值", title="Male Data")
        st.plotly_chart(fig, use_container_width=True)
    else:
        # 默认或点击Female时展示女性图表
        fig = px.bar(female_data, x="类别", y="数值", title="Female Data")
        st.plotly_chart(fig, use_container_width=True)

关键说明

  • 按钮状态逻辑:st.button()点击后会返回True,页面重新渲染时未点击的按钮返回False,以此触发图表切换。
  • 布局适配:st.columns()通过比例参数控制左右列宽度,让按钮和图表区域分布更合理。
  • 图表渲染:st.plotly_chart()直接接收Plotly的fig对象,use_container_width=True可让图表自适应列宽。

优化建议

如果需要保留用户的选择状态(比如点击后按钮保持激活状态),可以改用st.radio()组件,体验更流畅:

# 替换按钮为单选框的示例
with col2:
    gender = st.radio("选择性别", ["Female", "Male"])
with col1:
    if gender == "Male":
        fig = px.bar(male_data, x="类别", y="数值", title="Male Data")
    else:
        fig = px.bar(female_data, x="类别", y="数值", title="Female Data")
    st.plotly_chart(fig, use_container_width=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:09:22