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

Plotly范围滑块隐藏重复线条:实现仅显日期或空白的方法

Plotly Range Slider 隐藏折线方案

要解决Range Slider重复显示主图/子图折线的问题,可通过双x轴配置实现两种需求:

1. Range Slider仅显示日期轴(无折线)

创建一个隐藏的x轴承载Range Slider,将实际数据的trace关联到另一个可见的x轴,这样Range Slider里只会显示日期刻度,不会渲染任何折线。修改后的示例代码如下:

import plotly.express as px
import yfinance as yf
yf.pdr_override()

df = yf.download(tickers='aapl', period='1d', interval='1m')

fig = px.line(df, x=df.index, y='Close', title='Apple Stock Price')

# 配置双x轴:隐藏轴用于Range Slider,可见轴承载数据
fig.update_layout(
    xaxis=dict(
        rangeselector=dict(
            buttons=[
                dict(count=1, label="1m", step="month", stepmode="backward"),
                dict(step="all")
            ]
        ),
        rangeslider=dict(visible=True),
        type="date",
        visible=False  # 隐藏该轴,仅提供Range Slider功能
    ),
    xaxis2=dict(
        type="date",
        anchor="y",
        visible=True  # 作为主图的x轴显示
    ),
    yaxis=dict(anchor="x2")  # 关联y轴与可见x轴
)

# 将所有数据trace切换到可见x轴
fig.update_traces(xaxis='x2')

fig.show()

2. Range Slider完全不显示内容(仅保留滑块)

在双x轴基础上,进一步隐藏隐藏轴的网格和刻度标签,Range Slider里就只剩滑块,无任何内容:

import plotly.express as px
import yfinance as yf
yf.pdr_override()

df = yf.download(tickers='aapl', period='1d', interval='1m')

fig = px.line(df, x=df.index, y='Close', title='Apple Stock Price')

fig.update_layout(
    xaxis=dict(
        rangeselector=dict(
            buttons=[
                dict(count=1, label="1m", step="month", stepmode="backward"),
                dict(step="all")
            ]
        ),
        rangeslider=dict(visible=True),
        type="date",
        visible=False,
        showgrid=False,  # 隐藏网格
        showticklabels=False  # 隐藏日期刻度
    ),
    xaxis2=dict(
        type="date",
        anchor="y",
        visible=True
    ),
    yaxis=dict(anchor="x2")
)

fig.update_traces(xaxis='x2')

fig.show()

大量子图场景的适配

如果是多子图布局,只需为每个子图配置对应的可见x轴,将trace关联到各自的可见轴,同时用一个共享的隐藏x轴承载Range Slider:

import plotly.graph_objects as go
from plotly.subplots import make_subplots
import yfinance as yf
yf.pdr_override()

# 下载多只股票数据
tickers = ['aapl', 'msft']
df_dict = {t: yf.download(t, period='1d', interval='1m') for t in tickers}

# 创建子图
fig = make_subplots(rows=2, cols=1, subplot_titles=tickers)

# 添加数据trace
fig.add_trace(go.Scatter(x=df_dict['aapl'].index, y=df_dict['aapl']['Close'], name='AAPL'), row=1, col=1)
fig.add_trace(go.Scatter(x=df_dict['msft'].index, y=df_dict['msft']['Close'], name='MSFT'), row=2, col=1)

# 配置共享隐藏x轴与各子图的可见x轴
fig.update_layout(
    xaxis=dict(
        rangeselector=dict(
            buttons=[
                dict(count=1, label="1m", step="month", stepmode="backward"),
                dict(step="all")
            ]
        ),
        rangeslider=dict(visible=True),
        type="date",
        visible=False,
        showgrid=False,
        showticklabels=False
    ),
    xaxis2=dict(type="date", anchor="y", visible=True),
    xaxis3=dict(type="date", anchor="y2", visible=True),
    yaxis=dict(anchor="x2"),
    yaxis2=dict(anchor="x3")
)

# 关联trace到对应可见x轴
fig.update_traces(xaxis='x2', selector=dict(name='AAPL'))
fig.update_traces(xaxis='x3', selector=dict(name='MSFT'))

fig.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:30:45