Кусковая сетка из неупорядоченных данных x, y, z - PullRequest
0 голосов
/ 30 января 2019

У меня есть данные x, y и z, которые выглядят следующим образом (примерные данные):

x_data = [2, 2, 2, 3, 3, 3, 1, 1, 1, 4, 4, 4]
y_data = [16, 64, 32, 64, 32, 16, 16, 32, 64, 32, 16, 64]
z_data = [64, 31, 29, 78, 72, 63, 93, 40, 54, 35, 44, 3]

Поскольку я могу сопоставить каждое значение z уникальной паре данных x / y, я бы хотелпостроить его как заполненный контурный участок в matplotlib.contourf требует, чтобы x и y были либо сетками, либо размером соответствующего размера z.

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

mesh_x, mesh_y = np.meshgrid(np.unique(x_data), np.unique(y_data))
mesh_z = np.zeros(mesh_x.shape)

for x, y, z in zip(x_data, y_data, z_data):
    mesh_z[np.bitwise_and(y == mesh_y, x == mesh_x)] = z

Поскольку np.unique изменяет порядок значений, я не могу использовать np.reshape(z_data, mesh_x.shape) для создания необходимой структуры данных.

Хотя это решение работает, я чувствую, что должен быть лучший способ его архивировать.

1 Ответ

0 голосов
/ 30 января 2019

Я думаю, что это то, что вы хотите:

import numpy as np
import matplotlib.pyplot as plt

x_data = np.asarray([2, 2, 2, 3, 3, 3, 1, 1, 1, 4, 4, 4])
y_data = np.asarray([16, 64, 32, 64, 32, 16, 16, 32, 64, 32, 16, 64])
z_data = np.asarray([64, 31, 29, 78, 72, 63, 93, 40, 54, 35, 44, 3])
# Sort coordinates and reshape in grid
idx = np.lexsort((y_data, x_data)).reshape(4, 3)
# Plot
plt.contourf(x_data[idx], y_data[idx], z_data[idx])

Вывод:

Contour plot

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