在x,y和z轴上具有不同点数的曲面图

时间:2013-11-22 15:56:59

标签: python matplotlib plot

我正试图用{54}分来计算surface plotx axis51个点,y轴有9个点。 而z-axis有549分。例如:

fig  = plt.figure()
X = list(xrange(0,51))
Y = list(xrange(0,9))
Z = list(xrange(0,459))

print len(X)
print len(Y)
print len(Z)
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X,Y,Z, cmap=plt.cm.jet, cstride=1, rstride=1)
plt.savefig('graph-1' + '.jpg', bbox_inches='tight', pad_inches=0.2,dpi=100)
plt.clf()

我试图绘制它我得到以下错误:

ValueError: shape mismatch: two or more arrays have incompatible dimensions on axis 1.

当我们有不同的轴长度时,我们如何绘制?

3元组看起来像这样:

for a in range(0,len(X)):
 for b in range(0, len(Y)):
  for c in range(0, len(Z)):
    print (a,b,c)

3 个答案:

答案 0 :(得分:2)

对于此目的,Numpy还为切片和范围设置了meshgrid和快捷方式mgrid

答案 1 :(得分:1)

感谢@Andrey

import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import random


def fun(x, y):
        return test[x][y]

global test
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = list(xrange(0,9))
y = list(xrange(0,51))
test = [[a for a in range(0, len(y)] for b in range(0, len(x))]
X, Y = np.meshgrid(x, y)
zs = np.array([fun(x,y) for x,y in zip(np.ravel(X), np.ravel(Y))])
Z = zs.reshape(X.shape)
ax.plot_surface(X, Y, Z)

ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')

plt.show()

答案 2 :(得分:0)

编辑:

好的,再看一遍,你想在一个网格上绘制459点。使用这个循环:

for a in range(0,len(X)):
    for b in range(0, len(Y)):
        for c in range(0, len(Z)):
            print (a,b,c)

会给你超过459分,它会给你51*9*459分。

试试这个:

import itertools
X2,Y2=zip(*list(itertools.product(X,Y)))

这将创建x,y的所有可能组合,然后您应该能够绘制(X2,Y2,Z)len(X2)len(Y2)都是459