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

Python中基于条件绘制多色折线出现断裂问题求助

解决多色折线断裂问题的两种方法

John你好,我来帮你搞定这个折线断裂的问题!你遇到的情况是因为分组后每个片段只绘制了自己范围内的点,相邻片段的首尾点没有被同一次plot调用连接,所以Matplotlib不会自动把它们连起来。下面给你两种可行的解决方案:

方法一:分组时带上前一段的最后一个点

这种方法基于你原来的分组思路,只需要在绘制每个分组前,把前一个分组的最后一个点合并进来,保证相邻片段的首尾点能被同一条线段连接:

import pandas as pd
import matplotlib.pyplot as plt

trend = [0,0,0,1,1,1,-1,-1,-1,1,1,1,0,0,0,1,1,1,-1,-1]
price = [1,2,3,4,5,6,5,4,3,4,5,6,7,8,9,8,7,6,5,4]
df1 = pd.DataFrame({'Trend': trend, 'Price': price})

fig, ax = plt.subplots()

# 按Trend变化分组
groups = df1.groupby((df1.Trend.shift() != df1.Trend).cumsum())
prev_last_point = None

for _, group in groups:
    # 根据Trend匹配颜色
    if (group.Trend == -1).all():
        color = 'r'
    elif (group.Trend == 1).all():
        color = 'g'
    else:
        color = 'b'
    
    # 合并前一段的最后一个点,保证连线连续
    if prev_last_point is not None:
        plot_group = pd.concat([prev_last_point, group])
    else:
        plot_group = group
    
    ax.plot(plot_group.index, plot_group.Price, c=color, linewidth=2.0)
    # 更新前一段的最后一个点为当前组的最后一行
    prev_last_point = group.tail(1)

plt.show()

方法二:逐段绘制相邻点(更简洁直观)

这种思路跳过分组操作,直接遍历每一对相邻的点,根据起始点的Trend设置线段颜色,每一段单独绘制,从根源上保证折线连续:

import pandas as pd
import matplotlib.pyplot as plt

trend = [0,0,0,1,1,1,-1,-1,-1,1,1,1,0,0,0,1,1,1,-1,-1]
price = [1,2,3,4,5,6,5,4,3,4,5,6,7,8,9,8,7,6,5,4]
df1 = pd.DataFrame({'Trend': trend, 'Price': price})

fig, ax = plt.subplots()

# 建立Trend到颜色的映射表
color_map = {-1: 'r', 1: 'g', 0: 'b'}
line_width = 2.0

# 遍历每一对相邻点,绘制单条线段
for i in range(len(df1)-1):
    # 获取当前线段的x、y坐标
    x_coords = [df1.index[i], df1.index[i+1]]
    y_coords = [df1['Price'].iloc[i], df1['Price'].iloc[i+1]]
    # 根据当前点的Trend取颜色
    segment_color = color_map[df1['Trend'].iloc[i]]
    ax.plot(x_coords, y_coords, c=segment_color, linewidth=line_width)

plt.show()

个人更推荐第二种方法,代码更简洁,逻辑也更直观,不需要处理分组和首尾点的合并问题,而且完全避免了折线断裂的可能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 15:12:29