Видеть только NAN при использовании данных сетки для построения контура - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь получить двухмерную контурную карту из десяти точек

Я пытался использовать griddata для генерации моей сетки, но, похоже, она не работает, и я вижу только NAN в моей интерполированной сетке.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import griddata
xi = np.linspace(0,7500.0,100)
yi = np.linspace(0,7500.0,100)

indie_coords_y=[195,695,1195,1695,2195,2695,3195,3695,4195,4695]
indie_coords_x=[87,90,92,95,97,100,103,105,107,110]

z1_final=[12,13,14,15,16,17,18,19,20,21]

zi = griddata((indie_coords_x, indie_coords_y), z1_final, (xi[None,:], 
yi[:,None]), method='linear')
CS = plt.contourf(xi,yi,zi,cmap='jet', vmin=min(z1_final), 
vmax=max(z1_final))

Когда я использую приведенный выше код, я вижу, что мой массив zi имеет только значения NAN, тогда как я ожидаю увидеть некоторые контуры

Может ли кто-нибудь помочь, пожалуйста

1 Ответ

0 голосов
/ 05 февраля 2019

Я изменил входные данные (shuffle indie_coords_y).Кроме того, интерполяция должна быть выполнена для всех точек сетки.np.meshgrid используется для построения полной сетки..flatten() используется для преобразования сетки в список точек (т.е. массив формы number_of_points x number_of_dim).После интерполяции reshape используется для преобразования списка точек обратно в сетку (два n на n массива).

Теперь интерполяция и график работают:

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import griddata

# Data
indie_coords_y = [195, 2195, 3195, 2695, 3695, 4695, 695, 1195, 1695, 4195] # Modified! 
# using np.random.shuffle(indie_coords_y)
indie_coords_x = [87,90,92,95,97,100,103,105,107,110]

z1_final = [12,13,14,15,16,17,18,19,20,21]

# Interpolation
xi = np.linspace(80, 120.0, 30)  # modified range
yi = np.linspace(0, 5000.0, 30)

X_grid, Y_grid = np.meshgrid(xi, yi) # Create a grid (i.e. 100x100 arrays)

zi = griddata((indie_coords_x, indie_coords_y), z1_final,
              (X_grid.flatten(), Y_grid.flatten()), method='linear')

Z_grid = zi.reshape( X_grid.shape )

# Graph
CS = plt.contourf(X_grid, Y_grid, Z_grid, cmap='jet')

plt.plot(indie_coords_x, indie_coords_y, 'ko', label='data points')
plt.plot(X_grid.flatten(), Y_grid.flatten(), 'r,', label='interpolation points')
plt.xlabel('x'); plt.ylabel('y');
plt.colorbar(); plt.legend();

график:

graph

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