Двухмерный график плотности с данными XYZ - PullRequest
0 голосов
/ 02 октября 2019

Я пытаюсь построить 2d карту местности с координатами x, y и z (высота). Я следовал инструкциям по следующей ссылке, но получаю очень странный сюжет.

Python: двухмерный контурный график из 3 списков: x, y и rho?

Я провел почти полдня в поисках, но ничего не нашел.

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

# import data:
import xlrd
loc = "~/Desktop/Book4.xlsx"
wb = xlrd.open_workbook(loc)
sheet = wb.sheet_by_index(0)
sample=500

# Generate array:
x=np.array(sheet.col_values(0))[0:sample]
y=np.array(sheet.col_values(1))[0:sample]
z=np.hamming(sample)[0:sample][:,None]

# Set up a regular grid of interpolation points

xi, yi = np.meshgrid(x, y)

# Interpolate
rbf = scipy.interpolate.Rbf(x, y, z, function='cubic')
zi = rbf(xi, yi)
# Plot
plt.imshow(zi, vmin=z.min(), vmax=z.max(), origin='lower',
           extent=[x.min(), x.max(), y.min(), y.max()])
plt.colorbar()
plt.show()

Первый из следующих рисунков - это то, что я получаю, а последний - как это должно выглядеть. This is what I am getting This is how it should look like

Любая помощь приветствуется

Ссылка на файл данных

1 Ответ

1 голос
/ 02 октября 2019

Я думаю, что проблема в том, что данные, которые вы предоставляете, недостаточно гладкие для интерполяции с параметрами по умолчанию. Вот один из подходов, использующий mgrid вместо meshgrid:

import numpy as np
import pandas as pd
from scipy.interpolate import Rbf

# fname is your data, but as a CSV file.
data = pd.read_csv(fname).values
x, y = data.T

x_min, x_max = np.amin(x), np.amax(x)
y_min, y_max = np.amin(y), np.amax(y)

# Make a grid with spacing 0.002.
grid_x, grid_y = np.mgrid[x_min:x_max:0.002, y_min:y_max:0.002]

# Make up a Z.
z = np.hamming(x.size)

# Make an n-dimensional interpolator.
rbfi = Rbf(x, y, z, smooth=2)

# Predict on the regular grid.
di = rbfi(grid_x, grid_y)

Тогда вы можете посмотреть на результат:

import matplotlib.pyplot as plt

plt.imshow(di)

Я получаю:

the result of the interpolation

Я недавно написал по этой теме записную книжку Jupyter , ознакомьтесь с некоторыми другими методами интерполяции, такими как кригинг и подгонка сплайнов.

...