Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在x、y和z轴上具有不同点数的曲面打印_Python_Matplotlib_Plot - Fatal编程技术网

Python 在x、y和z轴上具有不同点数的曲面打印

Python 在x、y和z轴上具有不同点数的曲面打印,python,matplotlib,plot,Python,Matplotlib,Plot,我正在尝试绘制一个带有549个点的曲面图。 x轴有51个点,y轴有9个点。 z轴有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

我正在尝试绘制一个带有549个点的
曲面图。
x轴
51个
点,y轴有
9个
点。 z轴有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)
编辑:

好的,再看一遍,你们想在网格上画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

编辑:

好的,再看一遍,你们想在网格上画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
Numpy也有用于此目的的切片和范围的快捷方式

Numpy也有用于此目的的切片和范围的快捷方式

感谢@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()
感谢@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()


如果您的
z
点多于
x*y
,它如何绘制这些点?绘制的每个点都需要是一个元组
(x,y,z)
。如果z值没有对应的
x,y,
values matplotlib没有绘制z值的位置信息;(X1,Y2,Z2)。我可以以子列表的形式获取数据。请检查编辑。
51*9=459
。此外,列表的长度必须相等。当它到达Y的末端(长度9)时会发生什么。(X10,?,Z10)。您需要通过重复X和Y来创建长度相等的列表。对不起,我的错误。我忘了给出正确的Z尺寸。现在如何绘制?如果您的
z
点多于
x*y
,如何绘制这些点?绘制的每个点都需要是一个元组
(x,y,z)
。如果z值没有对应的
x,y,
values matplotlib没有绘制z值的位置信息;(X1,Y2,Z2)。我可以以子列表的形式获取数据。请检查编辑。
51*9=459
。此外,列表的长度必须相等。当它到达Y的末端(长度9)时会发生什么。(X10,?,Z10)。您需要通过重复X和Y来创建长度相等的列表。对不起,我的错误。我忘了给出正确的Z尺寸。现在我如何绘制它?这是X2、Y2和Z2 210681、210681、210681的大小,我得到以下错误:ValueError:zero size array to reduction operation minimum,它没有标识no。我认为这不能解决问题。因为上面的列表只给出了2元组。如果我没弄错的话,我们不需要构建一个3元组。它给出了两个长度为459的列表。这些是你的x和y列表。您已经有一个长度为459的列表,即z值。为了绘制这些点,需要一个x点列表和一个y点列表。所有这三个列表都需要相同的长度才能绘制它们。此函数用于创建x和y范围的网格。当我尝试绘制它时。我得到了同样的错误,也就是说,从零大小数组到最小缩减操作,它没有标识。你有这个的实际数据吗?如果z数组的长度为210681,则意味着您正在尝试绘制459个以上的点。这是X2、Y2和Z2 210681、210681、210681的大小,我得到以下错误:ValueError:零大小数组到最小缩减操作,没有标识no。我认为这不能解决问题。因为上面的列表只给出了2元组。如果我没弄错的话,我们不需要构建一个3元组。它给出了两个长度为459的列表。这些是你的x和y列表。您已经有一个长度为459的列表,即z值。为了绘制这些点,需要一个x点列表和一个y点列表。所有这三个列表都需要相同的长度才能绘制它们。此函数用于创建x和y范围的网格。当我尝试绘制它时。我得到了同样的错误,也就是说,从零大小数组到最小缩减操作,它没有标识。你有这个的实际数据吗?如果z数组的长度为210681,则表示您正在尝试绘制459个以上的点。