matplotlib 3D阵列的颜色图

cgvd09ve  于 2023-06-06  发布在  其他
关注(0)|答案(1)|浏览(178)

我有一个numpy数组,比如:Y[:,0]是表示x轴坐标的列表。对于这个轴上的每个点,由索引indx标记,有Y[indx,1][0]是y轴坐标的列表,Y[indx,1][1]是z轴数据的列表我现在可以使用下面的代码绘制3D中的线阵列。然而,我想绘制一个2D图,其中z数据表示x和y坐标上的颜色图(看起来像小波变换图的输出)。

#dummy data
Y=[0]*10
for i in range(10):
    temp=np.array([[indx,np.cos(indx)] for indx in range(50)])
    Y[i]=np.array([i,temp.transpose()])
Y=np.array(Y,dtype=object)

#plotting in 3D
ax = plt.figure().add_subplot(projection='3d')
for indx in range(len(Y[:,0])):
    ax.plot(Y[indx,1][0], Y[indx,1][1], zs=Y[:,0][indx], zdir='x')

这给了我3D图。我怎样才能得到我所描述的2D图?

gkn4icbw

gkn4icbw1#

对于每个x坐标,y坐标是否都相同,例如:Y[0,1][0] = Y[1,1][0]?另外,y坐标是否均匀分布?下面的解决方案假设这两个都是真的。

解决方案

创建与每个(x,y)位置关联的z值数组。然后使用新数组作为参数调用plt.imshow(...)。你甚至可以添加一个颜色栏!

注意:使用虚拟数据时,颜色Map表没有什么令人印象深刻的,但它适当地显示了您要求的图。

代码

#dummy data
Y=[0]*10
for i in range(10):
    temp=np.array([[indx,np.cos(indx)] for indx in range(50)])
    Y[i]=np.array([i,temp.transpose()],dtype=object)

Y=np.array(Y,dtype=object)

xVals = Y.T[0] # x axis coordinates (not used, but a useful piece of information)
yVals = Y.T[1][1][0].astype(int) # y axis coordinates as an integer array (also not used)

# create the array of zVals
zVals = np.concatenate(Y.T[1])[1::2]

#plotting in 3D
fig = plt.figure()
ax3d = fig.add_subplot(211,projection='3d')

for indx in range(len(Y[:,0])):
    ax3d.plot(Y[indx,1][0], Y[indx,1][1], zs=Y[:,0][indx], zdir='x')

#plotting in 2D
ax = fig.add_subplot(212)
im = plt.imshow(zVals)
cb = plt.colorbar()

相关问题