Давайте начнем с некоторых примеров данных:
import numpy as np
from scipy.interpolate import interp1d
import matplotlib.pylab as plt
# some 2D example data
x, y = np.arange(30)+1, np.arange(20)+1
x_grid, y_grid = np.meshgrid(x, y)
z_grid = np.cos(2*np.pi*x_grid/10) + np.sin(2*np.pi*y_grid/4)
# Graph 1
plt.pcolormesh(x, np.log(y), z_grid);
plt.xlabel('x'); plt.ylabel('log(y) (non regular spacing)');
Вот график с log (y) в качестве вертикальной оси.В этом случае выборка вдоль y является неоднородной (данные не изменяются, они рисуются только на деформированной сетке):
Для деформацииДля данных на регулярной сетке выполняется интерполяция между log(y)
и новой регулярной сеткой y:
# Interpolation of the transformed data on a regular new y axis
ylog_interpolation = interp1d(np.log(y), z_grid.T)
new_y = np.linspace(min(np.log(y)), max(np.log(y)), len(y))
new_z_grid = ylog_interpolation(new_y).T
# axis
plt.pcolormesh(x, new_y, new_z_grid);
plt.xlabel('x'); plt.ylabel('new y (regular spacing)');
Теперь сеткаобычный, но данные искажены, new_z_grid
можно экспортировать как изображение.