如何在Python中使用Matplotlib绘制双系列3D折线图?
Matplotlib 3D折线图:数据结构规范与坐标轴设置
一、数据结构规范
Matplotlib绘制3D折线图的核心规则:
- 调用
ax.plot(X, Y, Z)时,X、Y、Z必须是长度相同的一维数组,每一组索引对应的(X[i], Y[i], Z[i])构成折线的一个顶点。 - 多组折线无需使用三维数组,只需为每组折线单独调用一次
ax.plot(),传入该组对应的三个一维数组即可。
以你的示例数据为例:
- 第一组折线:X固定为1(长度9的一维数组),Y为
[1,2,3,4,5,6,7,8,9],Z为[1,1,1,1,5,1,1,1,1] - 第二组折线:X固定为2(长度9的一维数组),Y与第一组相同,Z为
[4.5,5,5,5,5.5,5,5,5,4.5]
二、坐标轴设置(X轴刻度调整)
要让X轴仅显示1和2两个刻度,直接用ax.set_xticks()指定刻度值即可,还可配合ax.set_xlim()限定轴范围,让刻度显示更美观:
ax.set_xticks([1, 2]) ax.set_xlim(0.5, 2.5) # 可选,避免刻度过于贴近轴边缘
三、完整可运行代码
import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import numpy as np # 创建画布和3D轴 fig = plt.figure() ax = fig.add_subplot(projection='3d') # 定义数据 z_data = np.array([[1,1,1,1,5,1,1,1,1], [4.5,5,5,5,5.5,5,5,5,4.5]]) y = np.array([1,2,3,4,5,6,7,8,9]) # 绘制第一条折线(X=1) x1 = np.ones(len(y)) ax.plot(x1, y, z_data[0], color='r', label='Group 1') # 绘制第二条折线(X=2) x2 = np.ones(len(y)) * 2 ax.plot(x2, y, z_data[1], color='g', label='Group 2') # 设置坐标轴 ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') ax.set_xticks([1, 2]) # 仅显示1和2两个刻度 ax.set_box_aspect(aspect=(1,1,2)) # 添加图例 ax.legend() plt.show()
关键疑问解答
- 各轴数据尺寸必须匹配吗? 是的。3D折线图的每个点需要三个坐标值一一对应,X、Y、Z数组的长度必须完全一致,否则Matplotlib会抛出维度不匹配的错误。
内容的提问来源于stack exchange,提问作者Radika Moonesinghe
相关产品推荐
相关产品推荐

