python - сопоставить значения x, y, z с данными 2D поверхности - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть следующий набор данных:

x = [50.0,  55.0,   6.6,    35.0,   32.7,   33.2,   14.9,   60.0,   44.0,   38.1]
y = [50.0,  25.0,   47.4,   34.9,   56.3,   78.4,   81.9,   73.4,   46.8    ,65.6]
z = [0.3,   -1.5,   0.1,    1.0,    1.9,    -0.1,   -0.4,   -0.1,   0.3,    -0.0]   

x и y - местоположение точки данных образца на 2D-поверхности.z - значение выборки данных в местоположении.

По сути, я хочу что-то вроде этого: enter image description here

Однако, как вы можете видеть, значения z еще не отображаются в формате 2D-сетки.

Это НЕ то, что я хочу:

x = np.arange(-5, 5, 0.1)
y = np.arange(-5, 5, 0.1)
xx, yy = np.meshgrid(x, y, sparse=True)
z = np.sin(xx**2 + yy**2) / (xx**2 + yy**2)

Все примеры, которые я нашел в сети, вычисляют матрицу z, предполагая некоторый контурный график, но это не так для меня.В моем случае z - это одномерный массив, который содержит, скажем, процент золота в скале в местах выборки, а x и y учитывают местоположение этой выборки.

Как я могу преобразовать массив z в 2D матрицу, которая учитывает местоположение образца?

В конце я хочу построить точечный график, используя 2D transformed_zматрица.

random_sample = transformed_z[x,y]
ax.scatter(y,x,c=transformed_z, cmap=im.cmap, norm=im.norm)

1 Ответ

0 голосов
/ 26 ноября 2018

IIUC, вы просто хотите отобразить значения в z в виде цветовой диаграммы рассеяния с x и y в качестве координат.

Вам не нужно преобразовывать z для этой цели, это можетбыть сделано чисто с заданными тремя массивами, как они:

import matplotlib.pyplot as plt

x = [50.0,  55.0,   6.6,    35.0,   32.7,   33.2,   14.9,   60.0,   44.0,   38.1]
y = [50.0,  25.0,   47.4,   34.9,   56.3,   78.4,   81.9,   73.4,   46.8    ,65.6]
z = [0.3,   -1.5,   0.1,    1.0,    1.9,    -0.1,   -0.4,   -0.1,   0.3,    -0.0]

plt.figure()

plt.scatter(x, y, c=z, cmap='Wistia')
cb = plt.colorbar()
cb.set_label('gold percentage of a rock (%)')
plt.xlabel('X')
plt.ylabel('Y')

for xt, yt, zt in zip(x, y, z):
    plt.text(xt, yt+1, str(zt), ha='center')

enter image description here

Я добавил значения в виде текста для более быстрого сравнения с массивами.

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