Как построить тепловую карту на 3 неупорядоченных массива в Python - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть набор массивов, который выглядит следующим образом:

x=[-200,-200,-200,-200,-200, -150, -150, -150,-150, -150, -100, ...]

y=[-60, -120, 0, 30, -30, -60, -120, 0, 30, -30, -60, ...] 

z=[0.2, 0.1, 0, -0.32, ...]

, где x, y - точки на сетке, а z - сила при соответствующих значениях x, y. (Другими словами 0.2 - это значение силы в x координате -200 и y в координате -60.) Я хотел бы построить тепловую карту значений z в каждом x, y точка в python. Обратите внимание, что одна из проблем заключается в том, что значения y не в порядке от наименьшего к наибольшему. Любая помощь будет оценена!

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Спасибо за помощь @Bazingaa. В конце концов я выбрал самое глупое из возможных решений. Я написал быструю функцию, которая находит нужный мне индекс массива и возвращает его. Это не элегантно, но у него есть то преимущество, что я всегда могу расширить его до дополнительных размеров, если это необходимо.

import numpy as np

def findxyind(xval, yval, xarray, yarray):    
    while True:
        for index in range(xarray.shape[0]):
            if xarray[index]==xval and yarray[index]==yval:
                return index

x=[-200,-200,-200,-200,-200, -150, -150, -150,-150, -150, -100, -100, -100, -100, -100]
y=[-60, -120, 0, 30, -30, -60, -120, 0, 30, -30, -60, -120, 0, 30, -30]
z=np.array([0.2, 0.1, 0, -0.32, 0.4, -0.2, 0.5, -0.1, 0.3, 0.4, -0.7, 0.7, 0.6, -0.3, 0.9])

x=np.asarray(x)
y=np.asarray(y)
xunique=np.unique(x)
yunique=np.unique(y)

zarray=np.empty([xunique.shape[0], yunique.shape[0]])

for i in range(xunique.shape[0]):
    for j in range(yunique.shape[0]):
        xval=xunique[i]
        yval=yunique[j]
        index=findxyind(xval, yval, x, y)
        zarray[i,j]=z[index]

X, Y = np.meshgrid(xunique, yunique, indexing='ij')
plt.pcolormesh(X, Y, zarray)
plt.colorbar()
plt.xlabel("X-values")
plt.ylabel("Y-values")
0 голосов
/ 05 сентября 2018

Вот минимальный рабочий ответ (кроме команд импорта) для вас. Замените x, y и z вашими фактическими данными. Я просто взял несколько случайных значений для z. return_index=True возвращает порядок оригинальных несортированных уникальных элементов.

x=[-200,-200,-200,-200,-200, -150, -150, -150,-150, -150, -100, -100, -100, -100, -100]
y=[-60, -120, 0, 30, -30, -60, -120, 0, 30, -30, -60, -120, 0, 30, -30]
z=np.array([0.2, 0.1, 0, -0.32, 0.4, -0.2, 0.5, -0.1, 0.3, 0.4, -0.7, 0.7, 0.6, -0.3, 0.9])

x=np.unique(x)
x = np.unique(x)
y1, yind = np.unique(y, return_index=True)
X,Y = np.meshgrid(x,y[sorted(yind)])
Z=z.reshape(len(y1),len(x), order='F')
plt.pcolormesh(X,Y,Z)
plt.colorbar()
plt.xlabel("X-values")
plt.ylabel("Y-values")

выход

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...