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

如何在Plotly Express中设置基于时间序列起始日的范围选择器?

解决方案:自定义Range Selector按钮实现基于起始日期的范围选择

由于Plotly原生的stepmode仅支持backward和todate,无法直接实现基于时间序列起始日期向前偏移的范围选择,我们可以通过自定义按钮的布局修改逻辑,手动设置x轴的显示范围来解决这个问题。

具体实现步骤:

  1. 先将数据中的日期列转换为datetime格式,提取出序列的首个日期。
  2. 计算出首个日期+1天、首个日期+3天的目标结束日期。
  3. 在rangeselector的按钮配置中,使用method='relayout'并指定xaxis.range为对应的日期区间。

完整代码示例:

import plotly.express as px
import pandas as pd
from datetime import timedelta

# 读取数据并处理日期列
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
df['Date'] = pd.to_datetime(df['Date'])

# 获取首个日期,计算目标范围的结束日期
first_date = df['Date'].min()
end_date_1d = first_date + timedelta(days=1)
end_date_3d = first_date + timedelta(days=3)

# 创建折线图
fig = px.line(df, x='Date', y='AAPL.High', title='Time Series with Range Slider and Custom Selectors')

# 更新x轴,配置自定义范围选择器
fig.update_xaxes(
    rangeslider_visible=True,
    rangeselector=dict(
        buttons=list([
            # 首个日期+1天的范围按钮
            dict(
                label="1d from start",
                method="relayout",
                args=[{"xaxis.range": [first_date.strftime('%Y-%m-%d'), end_date_1d.strftime('%Y-%m-%d')]}]
            ),
            # 首个日期+3天的范围按钮
            dict(
                label="3d from start",
                method="relayout",
                args=[{"xaxis.range": [first_date.strftime('%Y-%m-%d'), end_date_3d.strftime('%Y-%m-%d')]}]
            ),
            # 保留默认的全量数据按钮
            dict(label="All", method="relayout", args=[{"xaxis.range": None}])
        ])
    )
)

fig.show()

代码说明:

  • 通过pd.to_datetime将日期列转为datetime类型,方便后续日期计算。
  • 使用timedelta计算起始日期偏移后的结束日期,再转为Plotly能识别的字符串格式。
  • 每个自定义按钮通过method="relayout"修改图表布局,args参数直接指定x轴的显示范围为起始日期到目标结束日期。
  • 额外添加"All"按钮,方便用户快速回到全量数据视图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:31:02