Python matplotlib线框打印/三维打印方式
我想用matplotlib制作一个3d绘图 数据如下:我有一个矩阵,每行包含3d绘图的Y坐标。每行第一个元素都是三维打印的X坐标。最后,第二个矩阵包含X,Y位置处每个点的高。因此,第二个矩阵包含我的Z坐标。这两个矩阵都是Python中的数组数组。我想知道如何转换数据以获得:Python matplotlib线框打印/三维打印方式,python,3d,plot,matplotlib,wireframe,Python,3d,Plot,Matplotlib,Wireframe,我想用matplotlib制作一个3d绘图 数据如下:我有一个矩阵,每行包含3d绘图的Y坐标。每行第一个元素都是三维打印的X坐标。最后,第二个矩阵包含X,Y位置处每个点的高。因此,第二个矩阵包含我的Z坐标。这两个矩阵都是Python中的数组数组。我想知道如何转换数据以获得: 对应于X的每个1d信号的绘图,如图所示(在线提供照片) 相同数据的线框图,如下所示 我已经为线框工作编写了一个辅助函数 ######## HELPER FOR PLOT 3-D def plot_3d(name,
- 对应于X的每个1d信号的绘图,如图所示(在线提供照片)
- 相同数据的线框图,如下所示
######## HELPER FOR PLOT 3-D
def plot_3d(name,X,Y,Z):
fig = plt.figure(name)
ax = fig.gca(projection='3d')
X = np.array(X)
Y = np.array(Y)
Z = np.array(Z)
ax.plot_wireframe(X,Y,Z,rstride=10,cstride=10)
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
plt.show()
但我不知道如何转换数据X,Y,Z以使它们符合matplotlib函数的要求,matplotlib函数需要X,Y,Z的二维列表
对于第一个图形,我阅读了帮助,并希望在3d中使用2d绘图。示例源代码给出:
x = np.linspace(0, 1, 100)
y = np.sin(x * 2 * np.pi) / 2 + 0.5
ax.plot(x, y, zs=0, zdir='z', label='zs=0, zdir=z')
其中z是常数坐标。在我的例子中,x是常数坐标。我适应
fig = plt.figure('2d profiles')
ax = fig.gca(projection='3d')
for i in range(10):
x = pt ## this is a scalar
y = np.array(y)
z = np.array(z)
ax.plot(xs = x, y, z, xdir='x')
plt.show()
但是有一个警告:关键字arg之后是非关键字arg
。如何修复
感谢并问候关于在3D中显示一系列矢量,我提供了以下“几乎正常”的解决方案:
def visualizeSignals(self, imin, imax):
times = self.time[imin:imax]
nrows = (int)((times[(len(times)-1)] - times[0])/self.mod) + 1
fig = plt.figure('2d profiles')
ax = fig.gca(projection='3d')
for i in range(nrows-1):
x = self.mat1[i][0] + self.mod * i
y = np.array(self.mat1T[i])
z = np.array(self.mat2[i])
ax.plot(y, z, zs = x, zdir='z')
plt.show()
对于二维曲面或网格划分,我使用网格划分。请注意,一旦您知道如何构建网格网格,就可以自己复制网格网格。有关meshgrid的更多信息,请参阅
下面是代码(不能这样使用它,因为它引用了类成员,但您可以基于我使用的matplotlib中的3d plot方法构建代码)
关于在3D中显示一系列矢量,我提出了以下“几乎可行”的解决方案:
def visualizeSignals(self, imin, imax):
times = self.time[imin:imax]
nrows = (int)((times[(len(times)-1)] - times[0])/self.mod) + 1
fig = plt.figure('2d profiles')
ax = fig.gca(projection='3d')
for i in range(nrows-1):
x = self.mat1[i][0] + self.mod * i
y = np.array(self.mat1T[i])
z = np.array(self.mat2[i])
ax.plot(y, z, zs = x, zdir='z')
plt.show()
对于二维曲面或网格划分,我使用网格划分。请注意,一旦您知道如何构建网格网格,就可以自己复制网格网格。有关meshgrid的更多信息,请参阅
下面是代码(不能这样使用它,因为它引用了类成员,但您可以基于我使用的matplotlib中的3d plot方法构建代码)
你是说例外。尝试将线
ax.plot(xs=x,y,z,xdir='x')
更改为ax.plot(xs=x,ys-y,zs=z,xdir='x')
您的意思是异常。尝试将线ax.plot(xs=x,y,z,xdir='x')
更改为ax.plot(xs=x,ys-y,zs=z,xdir='x')