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

Plotly折线图能否为特定数据段的线段设置不同颜色?

Plotly折线图特定线段设置不同颜色的实现方法

Plotly完全支持为折线图的特定线段部分设置不同颜色,以下是具体实现方案:

核心思路

把原始数据拆分成两类连续分段:

  • 一类是数值处于 0.95 ≤ value ≤ 1.1 区间的正常线段(默认颜色)
  • 另一类是数值 >1.1 或 <0.95 的高亮线段(红色)

关键要保证线段的连续性——当某个点触发高亮条件时,需要把相邻的前/后点也纳入对应分段,避免出现断点。

完整代码示例

import plotly.express as px
import pandas as pd

# 获取并整理原始数据
df = px.data.stocks()
df_goog = df[['date', 'GOOG']].rename(columns={'GOOG': 'value'})

# 标记需要高亮的点
df_goog['highlight'] = df_goog['value'].apply(lambda x: 1 if x > 1.1 or x < 0.95 else 0)

# 生成连续的线段分段
segments = []
current_segment = []
prev_highlight = df_goog['highlight'].iloc[0]

for idx, row in df_goog.iterrows():
    current_segment.append(row)
    # 当前点与下一个点标记不同时,结束当前分段
    if idx < len(df_goog)-1 and row['highlight'] != df_goog['highlight'].iloc[idx+1]:
        segments.append(pd.DataFrame(current_segment))
        current_segment = []
# 添加最后一段数据
segments.append(pd.DataFrame(current_segment))

# 创建图形并添加分段线段
fig = px.line()
for seg in segments:
    line_color = 'red' if seg['highlight'].iloc[0] == 1 else 'blue'
    fig.add_scatter(
        x=seg['date'],
        y=seg['value'],
        mode='lines',
        line=dict(color=line_color),
        showlegend=False
    )

# 调整图表布局
fig.update_layout(
    title='GOOG股价走势(超出范围线段高亮)',
    xaxis_title='日期',
    yaxis_title='股价相对值'
)

fig.show()

代码说明

  1. 数据标记:通过highlight列区分需要高亮的点;
  2. 分段处理:遍历数据将连续同标记的点归为一个分段,确保线段无断点;
  3. 分段绘图:为每个分段设置对应颜色,叠加到同一张图中,实现目标效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 13:39:40