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()
代码说明
- 数据标记:通过
highlight列区分需要高亮的点; - 分段处理:遍历数据将连续同标记的点归为一个分段,确保线段无断点;
- 分段绘图:为每个分段设置对应颜色,叠加到同一张图中,实现目标效果。
内容的提问来源于stack exchange,提问作者Ailurophile
相关产品推荐
相关产品推荐

