Как построить неупорядоченные точки в pcolormesh? [Дубликат]

sys.argv - это список.

Этот список создается вашей командной строкой, это список аргументов командной строки.

Для Пример:

в вашей командной строке вы вводите что-то вроде этого,

  python3.2 file.py что-то  

sys.argv станет списком ['file.py', 'something']

В этом случае sys.argv [1] = 'something' [ ! d9]

3
задан Paul Eigenthaler 16 July 2013 в 05:20
поделиться

4 ответа

Я предполагаю, что 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)

, который даст вам точки сетки, что является хорошей отправной точкой.

4
ответ дан Gustav Larsson 16 August 2018 в 04:30
поделиться

В приведенных выше примерах данные 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()

three_1D_arrays_2D_plot

6
ответ дан Ramesh Koirala 16 August 2018 в 04:30
поделиться
1
ответ дан Stefan 16 August 2018 в 04:30
поделиться

Кажется, вы рисуете 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) 
0
ответ дан Trond Kristiansen 16 August 2018 в 04:30
поделиться
  • 1
    Я попробовал это и получил ошибку: ValueError: общий размер нового массива должен быть неизменным – Paul Eigenthaler 22 July 2013 в 17:43
  • 2
    Реорганизованный массив должен иметь одинаковое общее количество элементов, чем исходный массив. Попробуйте записать размер массивов, чтобы убедиться, что ваш измененный массив совпадает с оригиналом (после чтения данных из файла, но перед изменением): & quot; print x.shape, y.shape, z.shape & quot; ;. – Trond Kristiansen 24 July 2013 в 14:09
Другие вопросы по тегам:

Похожие вопросы: