Сводка
У меня есть несколько случайно размещенных данных, которые я хотел бы привести в сетку и отобразить на трехмерном графике поверхности с цветом. Я формирую данные с помощью scipy.interpolate.griddata (). Однако при использовании параметров метода 'linear' или 'cubic' поверхность отображается только как цвет с наименьшим значением на карте.
Вещи, которые я пробовал, но не сработало:
- Изменение границ сетки.
- Нормализация данных.
- Отображение только 1 графика за раз.
- Построение различных тестовых функций (Экли, Растригин, Химмельблау, Розенброк).
Код:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from scipy.interpolate import griddata
def rosenbrock(x, y):
# plotting test function
return 100.0 * (y - x**2)**2 + (1.0 - x)**2
def plotGrid(x, y, z, title):
# plot data as a 3D surface above a contour map
cmap = plt.get_cmap('Spectral')
fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(x, y, z, cmap=cmap)
ax.contour( x, y, z, cmap=cmap, offset=0.0)
ax.set_title(title)
def main():
# generate a grid to interpolate between
gx, gy = np.mgrid[-5:5:100j, -5:5:100j]
# generate random points to mold into the desired grid
p = np.random.rand(100, 2) * 10.0 - 5.0
# find values for each random point pair
v = rosenbrock(p[:,0], p[:,1])
# interpolate the data into a grid
g0 = griddata(p, v, (gx, gy), method='nearest')
g1 = griddata(p, v, (gx, gy), method='linear')
g2 = griddata(p, v, (gx, gy), method='cubic')
# plot the data
plotGrid(gx, gy, rosenbrock(gx, gy), 'True Grid')
plotGrid(gx, gy, g0, 'Nearest')
plotGrid(gx, gy, g1, 'Linear')
plotGrid(gx, gy, g2, 'Cubic')
plt.show()
if __name__ == '__main__':
main()
Ожидания
Приведенный выше код создает трехмерный график для каждого типа сетки: True,Ближайший, линейный и кубический.
На графиках 'True' и 'Nearest' сетка поверхности визуализируется как ожидаемые цвета на основе высоты этих данных.
На графиках 'Linear' и 'Cubic' поверхностьсетка отображается только как цвет с наименьшим значением (для карты «Spectral» этот цвет - пурпурный). Мне бы хотелось, чтобы на этих графиках отображался полный спектр цветов, как это делают первые 2 графика.
У меня недостаточно репутации для публикации изображений, но вот ссылка на альбом со всеми 4 участками.