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

Plotly(Python)中如何在无数据位置断开折线?

在Plotly中让折线在无数据处断开的方法

你遇到的问题是因为Plotly的Scatter组件默认会按x轴顺序连接所有给定的点,不管这些点之间是否存在数据间隔。要实现折线断开,有两种常用方案:

方案一:插入NaN值断开折线

Plotly会自动忽略NaN值并断开折线,你可以在需要分隔的线段之间插入None(对应NaN)来实现间隔。

代码示例:

import pandas as pd
import plotly.graph_objects as go

df = pd.DataFrame(range(2,12), index=pd.date_range(start='2010-01-01', freq='d', periods=10), columns=['A'])
idx_groups = [[1,2], [4,5], [7,8]]  # 将索引按连续段分组

x_vals = []
y_vals = []

for group in idx_groups:
    # 添加当前段的x、y数据
    x_vals.extend(df.index[group])
    y_vals.extend(df['A'][group])
    # 插入None实现折线断开
    x_vals.append(None)
    y_vals.append(None)

# 移除最后一组多余的None(避免末尾出现空点)
x_vals = x_vals[:-1]
y_vals = y_vals[:-1]

fig = go.Figure()
fig.add_trace(go.Scatter(x=x_vals, y=y_vals, mode='lines+markers'))
fig.show()

或者更简洁的方式:先将原数据中缺失索引的位置设为NaN,再直接绘图:

import pandas as pd
import plotly.graph_objects as go

df = pd.DataFrame(range(2,12), index=pd.date_range(start='2010-01-01', freq='d', periods=10), columns=['A'])
idx = [1,2,4,5,7,8]

# 创建完整数据副本,将不在idx中的行设为NaN
df_full = df.copy()
df_full.loc[~df_full.index.isin(df.index[idx]), 'A'] = pd.NA

fig = go.Figure()
fig.add_trace(go.Scatter(x=df_full.index, y=df_full['A'], mode='lines+markers'))
fig.show()

方案二:分多次添加折线Trace

如果数据段不多,可以直接为每一段独立的折线添加一个Scatter组件,这样各段之间自然断开。

代码示例:

import pandas as pd
import plotly.graph_objects as go

df = pd.DataFrame(range(2,12), index=pd.date_range(start='2010-01-01', freq='d', periods=10), columns=['A'])

fig = go.Figure()
# 添加第一段折线
fig.add_trace(go.Scatter(x=df.index[1:3], y=df['A'][1:3], mode='lines+markers'))
# 添加第二段折线
fig.add_trace(go.Scatter(x=df.index[4:6], y=df['A'][4:6], mode='lines+markers'))
# 添加第三段折线
fig.add_trace(go.Scatter(x=df.index[7:9], y=df['A'][7:9], mode='lines+markers'))

fig.show()

注意:如果需要保持各段折线样式一致,在添加Scatter时可以统一设置line参数(如line=dict(color='blue'))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:10:32