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

使用稀疏DataFrame绘制Pandas折线图有间隙,需保留分段颜色并连通线条

解决折线图分段有间隙且保留各段颜色的方法

你的代码里每列数据被NaN分隔成独立段,pandas默认绘制时会因为NaN断开线条。要实现连通且保留各段颜色,可以手动绘制每一段并连接相邻分段的首尾点,具体步骤如下:

完整代码示例

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 初始化数据
dfx = pd.DataFrame()
dfx['bing'] = [1,2,3,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan]
dfx['bang'] = [np.nan,np.nan,np.nan,4,5,6,np.nan,np.nan,np.nan]
dfx['boo'] = [np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,7,8,9]

# 提取每列的有效数据(非NaN)及其索引
segments = []
for col in dfx.columns:
    valid_data = dfx[col].dropna()
    segments.append( (valid_data.index, valid_data.values) )

# 获取pandas默认的颜色循环,对应各列颜色
colors = plt.rcParams['axes.prop_cycle'].by_key()['color']

# 绘制图形
plt.figure(figsize=(8, 4))

# 绘制第一个分段
first_idx, first_vals = segments[0]
plt.plot(first_idx, first_vals, color=colors[0], label=dfx.columns[0], linewidth=2)

# 绘制后续分段并连接前一段终点
for i in range(1, len(segments)):
    prev_idx, prev_vals = segments[i-1]
    curr_idx, curr_vals = segments[i]
    # 连接前一段最后一个点与当前段第一个点
    plt.plot([prev_idx[-1], curr_idx[0]], [prev_vals[-1], curr_vals[0]], color=colors[i], linewidth=2)
    # 绘制当前分段
    plt.plot(curr_idx, curr_vals, color=colors[i], label=dfx.columns[i], linewidth=2)

plt.legend()
plt.show()

原理说明

  1. 先提取每列的非NaN数据及其对应的索引,得到三个独立的数据分段;
  2. 调用matplotlib默认的颜色循环,保证各分段颜色和pandas默认绘图一致;
  3. 先绘制第一个分段,再依次绘制后续分段,同时用当前分段的颜色连接前一段的终点和当前段的起点,实现整条折线连通;
  4. 保留原列名作为图例,和原绘图的展示逻辑一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:10:32