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

Plotly Scatter折线图条件着色失效问题求助

解决Plotly折线图条件着色问题

Plotly的Scatter组件在mode="lines"模式下,line.color不支持直接传入颜色列表(仅支持单一颜色或关联颜色轴),因此原散点图的条件着色方法无法直接复用。要在单个Scatter对象中实现y值大于600的对应线段显示红色的需求,可通过构造连续分段线段数据+颜色轴映射的方式实现:

实现步骤

  1. 判断每一段相邻点连线的条件:只要线段两端任意一个点的y值大于600,该线段设为红色,否则为蓝色。
  2. 拼接连续折线数据(重复端点保证折线连续),同时生成对应线段的颜色映射数值。
  3. 通过coloraxis将数值映射到指定颜色,关联到折线的颜色属性。

完整代码

import plotly.graph_objects as go
import pandas as pd

df = pd.DataFrame({
    "x": [1, 2, 3, 4, 5, 6, 7],
    "y": [200, 400, 100, 800, 500, 200, 1100]
})

# 定义每段线段的颜色:线段两端任一y>600则为红色,否则蓝色
segment_colors = []
for i in range(len(df)-1):
    if df['y'].iloc[i] > 600 or df['y'].iloc[i+1] > 600:
        segment_colors.append('red')
    else:
        segment_colors.append('blue')

# 构造连续折线数据(重复端点保证线段连续),以及对应的颜色映射数值
x_lines = []
y_lines = []
color_vals = []
color_map = {'blue': 0, 'red': 1}  # 将颜色映射为数值,用于关联颜色轴

for i in range(len(df)-1):
    x_lines.extend([df['x'].iloc[i], df['x'].iloc[i+1]])
    y_lines.extend([df['y'].iloc[i], df['y'].iloc[i+1]])
    color_vals.extend([color_map[segment_colors[i]], color_map[segment_colors[i]]])

# 创建单个Scatter对象,通过颜色轴实现条件着色
fig = go.Figure(go.Scatter(
    x=x_lines,
    y=y_lines,
    mode="lines",
    color=color_vals,
    line=dict(coloraxis="coloraxis"),
    showlegend=False
))

# 配置颜色轴:隐藏刻度,映射数值到对应颜色
fig.update_layout(
    coloraxis=dict(
        colorscale=[[0, 'blue'], [1, 'red']],
        showscale=False
    )
)

fig.show()

效果说明

运行代码后,连接x=3-x=4(y从100到800)、x=4-x=5(y从800到500)、x=6-x=7(y从200到1100)的线段会显示为红色,其余线段为蓝色,完全符合需求且仅使用了单个Scatter对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:45:33