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

如何在Streamlit+Plotly的股票时序图中绘制用户输入的动态方程?

实现动态股票算式可视化功能方案

完全可行,你可以通过解析用户输入的算式、计算衍生序列并添加到现有Plotly图表这几个步骤实现需求,以下是具体实现方案:

核心实现步骤

  • 在Streamlit界面添加输入框,接收用户的算式(如GOOG-AAPL、NFLX+MSFT)
  • 验证算式中涉及的股票代码是否存在于数据集内
  • 利用Pandas的eval()方法计算衍生序列
  • 将计算结果作为新折线添加到原Plotly图表中
  • 处理输入错误场景,给用户明确提示

完整代码示例

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

# 加载股票数据
df = px.data.stocks()
# 提取可用股票代码(排除date列)
available_stocks = [col for col in df.columns if col != "date"]

# 构建基础时间序列图表
fig = px.line(df, x="date", y=available_stocks,
              hover_data={"date": "|%B %d, %Y"},
              title='股票时间序列及自定义计算')
fig.update_xaxes(
    dtick="M1",
    tickformat="%b\n%Y")

# 添加用户算式输入框
user_formula = st.text_input("输入股票算式(如GOOG-AAPL、NFLX+MSFT)", 
                             placeholder="支持+、-、*、/四则运算")

if user_formula:
    try:
        # 提取算式中的股票代码并验证合法性
        mentioned_stocks = re.findall(r'[A-Z]+', user_formula)
        for stock in mentioned_stocks:
            if stock not in available_stocks:
                raise ValueError(f"股票代码{stock}不存在,可用代码:{','.join(available_stocks)}")
        
        # 计算自定义序列
        df['custom_calc'] = df.eval(user_formula)
        # 将新序列添加到图表
        new_trace = px.line(df, x="date", y="custom_calc").data[0]
        new_trace.name = user_formula
        fig.add_trace(new_trace)
        
    except Exception as e:
        st.error(f"输入错误:{str(e)}")

# 渲染最终图表
st.plotly_chart(fig)

关键细节说明

  • df.eval()可以安全解析并执行用户输入的四则运算算式,无需手动拆分计算逻辑
  • 通过正则提取股票代码并提前校验,避免因无效代码导致的计算错误
  • 用fig.add_trace()添加新折线时,直接复用Plotly生成的轨迹对象,保证图表风格统一
  • 异常处理覆盖了代码不存在、语法错误等常见场景,提升用户体验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:57:30