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

如何在Matplotlib绘制的3D折线图中添加分段中断?

解决3D折线图不必要的中间连接线问题

你的问题出在:生成的x、y、z是把14组连续数据直接拼接成了一个长数组,plot3D会按数组顺序连接所有点,导致第1组的最后一个点(x=199、z=1)和第2组的第一个点(x=0、z=2)之间被错误连线,出现多余的中间线条。

解决核心是在每组数据之间插入NaN值——matplotlib绘制折线时,遇到NaN会自动中断,不会连接前后的点。

方法一:拆分重组数组(直观易懂)

先把原数组拆成14组,给每组末尾加一个NaN,再重新拼接成新数组:

import numpy as np
import matplotlib.pyplot as plt

# 生成原始数组
x = np.tile(np.arange(0,200), 14)
y = np.random.randint(200, size=2800)
z = np.repeat(np.arange(1,15), 200)

# 每组200个点,拆分成14组
group_size = 200
x_groups = np.array_split(x, 14)
y_groups = np.array_split(y, 14)
z_groups = np.array_split(z, 14)

# 给每组末尾添加NaN后拼接
x_new, y_new, z_new = [], [], []
for xg, yg, zg in zip(x_groups, y_groups, z_groups):
    x_new.append(np.append(xg, np.nan))
    y_new.append(np.append(yg, np.nan))
    z_new.append(np.append(zg, np.nan))

x_new = np.concatenate(x_new)
y_new = np.concatenate(y_new)
z_new = np.concatenate(z_new)

# 绘制3D折线图
ax = plt.axes(projection='3d')
ax.plot3D(x_new, z_new, y_new)
plt.show()

方法二:直接插入NaN(更高效)

不用拆分数组,直接在每组的分界位置插入NaN,代码更简洁:

import numpy as np
import matplotlib.pyplot as plt

# 生成原始数组
x = np.tile(np.arange(0,200), 14)
y = np.random.randint(200, size=2800)
z = np.repeat(np.arange(1,15), 200)

group_size = 200
# 计算要插入NaN的位置:第200、400...2600位
insert_positions = np.arange(group_size, len(x), group_size)

# 在指定位置插入NaN
x_new = np.insert(x, insert_positions, np.nan)
y_new = np.insert(y, insert_positions, np.nan)
z_new = np.insert(z, insert_positions, np.nan)

# 绘图
ax = plt.axes(projection='3d')
ax.plot3D(x_new, z_new, y_new)
plt.show()

两种方法都能让每组数据的折线独立,不会出现跨组的多余连接线。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:20:31