Найти - Пользователи
Полная версия: Рисуем неупорядоченные (x,y,z) посредством matplotlib.pyplot.contourf
Начало » Центр помощи » Рисуем неупорядоченные (x,y,z) посредством matplotlib.pyplot.contourf
1
dd11
Нужно знакомой девушке для завтрашней сдачи. Сам сдулся, с меня вознаграждение если осилим сегодня!

(numpy, matplotlib, mpl_toolkits.basemap и scipy не помешают)

# упрощенная сетка с данными
x = 3,7,9
y = 1,4,5
z = 20,3,7
# дробим на grid и создаём сетку
xi = np.linspace(min(x)-1, max(x)+1, 9)
yi = np.linspace(min(y)-1, max(y)+1, 9)
X, Y = np.meshgrid(xi, yi)

Вот теперь самое время интерполировать “z” по нашей сетке…
numpy.interp не помошник в 2д
zi = matplotlib.mlab.griddata(x,y,z,xi,yi,interp=“linear”) как и “nn” выдают весьма странные сетки
zi = scipy.interpolate.griddata((x, y), z, (xi, yi), method='cubic') вообще они nil-ы

А нужна собственно, линейная интерполяция для рисования matplotlib.pyplot.contourf сродни


Надеюсь здесь есть светлые головы (если сами не могёте, скажите где freelance поискать?)

Спасибо!
doza_and
А обязательно линейная? тогда триангуляция Делоне и т п. http://faqs.org.ru/forum/viewtopic.php?f=79&t=27168
Посмотрите в этой ссылке метод обратных квадратов- позволяет сгладить точки без выкрутасов.
gisolog
немного переработанный код отсюда. уж не знаю, поможет или нет. в любом случае - удачи!
# -*- coding: utf-8 -*-
import numpy as np
import scipy as sp
from scipy.interpolate import griddata
import random
import matplotlib.pyplot as plt
parts = 50
x = np.linspace(0.1, 2, parts)
y = np.linspace(0.1, 1, parts)
z = np.linspace(0.1, 10, parts)
random.shuffle(y)
random.shuffle(z)
points = np.array([ list(p) for p in zip(x, y) ])
grid_x, grid_y = np.mgrid[0:1:100j, 0:1:200j]
grid_z0 = griddata(points, z, (grid_x, grid_y), method='nearest')
grid_z1 = griddata(points, z, (grid_x, grid_y), method='linear')
grid_z2 = griddata(points, z, (grid_x, grid_y), method='cubic')
ax = plt.subplot(221)
plt.title('Original')
plt.plot(points[:,0], points[:,1], 'k.', ms=1)
for t in range(len(x)):
    ax.text(x[t], y[t] + 0.02, '%.1f' % z[t])
plt.subplot(222)
plt.plot(points[:,0], points[:,1], 'k.', ms=1)
plt.imshow(grid_z0.T, extent=(0,1,0,1), origin='lower')
plt.title('Nearest')
plt.subplot(223)
plt.plot(points[:,0], points[:,1], 'k.', ms=1)
plt.imshow(grid_z1.T, extent=(0,1,0,1), origin='lower')
plt.title('Linear')
plt.subplot(224)
plt.plot(points[:,0], points[:,1], 'k.', ms=1)
plt.imshow(grid_z2.T, extent=(0,1,0,1), origin='lower')
plt.title('Cubic')
plt.gcf().set_size_inches(6, 6)
plt.show()
результат вот:
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB