如何在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
相关产品推荐
相关产品推荐

