sys.argv
- это список.
Этот список создается вашей командной строкой, это список аргументов командной строки.
Для Пример:
в вашей командной строке вы вводите что-то вроде этого,
python3.2 file.py что-то
sys.argv
станет списком ['file.py', 'something']
В этом случае sys.argv [1] = 'something'
[ ! d9]
Я предполагаю, что x, y и z будут считаться одномерными векторами одинаковой длины, скажем N. Проблема заключается в том, что при создании ваших xmesh
и ymesh
они являются N x N , которые должны быть ваши значения z. Это только N, поэтому вы получаете сообщение об ошибке.
Каков макет вашего файла? Я предполагаю, что каждая строка является (x, y, z), из которой вы хотите создать сетку. Чтобы сделать это, вам нужно знать, как точки упорядочиваются как сетка (либо в виде строки, либо в виде столбца). Как только вы это знаете, вместо создания xmesh
и ymesh
вы можете сделать что-то вроде этого:
N = np.sqrt(len(x)) # Only if squared, adjust accordingly
x = x.reshape((N, N))
y = y.reshape((N, N))
z = z.reshape((N, N))
pcolormesh(x, y, z)
Прежде чем это сделать, я начну с этого:
scatter(x, y, c=z)
, который даст вам точки сетки, что является хорошей отправной точкой.
В приведенных выше примерах данные x, y и z могут быть легко изменены, чтобы получить 2D-массив. Ответ ниже для тех, кто ищет более обобщенный ответ со случайными массивами x, y и z.
import matplotlib.pyplot as plt
from matplotlib.mlab import griddata
import numpy
# use your x,y and z arrays here
x = numpy.random.randint(1,30, 50)
y = numpy.random.randint(1,30, 50)
z = numpy.random.randint(1,30, 50)
yy, xx = numpy.meshgrid(y,x)
zz = griddata(x,y,z,xx,yy, interp='linear')
plt.pcolor(zz)
#plt.contourf(xx,yy,zz) # if you want contour plot
#plt.imshow(zz)
plt.pcolorbar()
plt.show()
Кажется, вы рисуете X и Y как 2D-массивы, в то время как Z все еще является 1D-массивом. Попробуйте что-то вроде:
Znew=np.reshape(z,(len(xmesh[:,0]),len(xmesh[0,:])))
diagram1.pcolormesh(xmesh,ymesh,Znew)
Обновление: у вас есть сетка X / Y размером 4x4:
x = np.genfromtxt('mesh.txt', dtype=float, delimiter=' ', usecols = (0))
y = np.genfromtxt('mesh.txt', dtype=float, delimiter=' ', usecols = (1))
z = np.genfromtxt('mesh.txt', dtype=float, delimiter=' ', usecols = (2))
Измените массивы в качестве рекомендаций для @Gustav Larsson и меня так :
Xnew=np.reshape(x,(4,4))
Xnew=np.reshape(y,(4,4))
Znew=np.reshape(z,(4,4))
Что дает вам три массива 4x4 для построения с использованием pcolormesh:
diagram1.pcolormesh(Xnew,Ynew,Znew)