Уведомления

Группа в Telegram: @pythonsu

#1 Май 24, 2012 17:52:00

dd11
Зарегистрирован: 2012-05-24
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Рисуем неупорядоченные (x,y,z) посредством matplotlib.pyplot.contourf

Нужно знакомой девушке для завтрашней сдачи. Сам сдулся, с меня вознаграждение если осилим сегодня!

(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 поискать?)

Спасибо!

Офлайн

#2 Май 24, 2012 19:33:52

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Рисуем неупорядоченные (x,y,z) посредством matplotlib.pyplot.contourf

А обязательно линейная? тогда триангуляция Делоне и т п. http://faqs.org.ru/forum/viewtopic.php?f=79&t=27168
Посмотрите в этой ссылке метод обратных квадратов- позволяет сгладить точки без выкрутасов.



Офлайн

#3 Май 24, 2012 20:23:36

gisolog
Зарегистрирован: 2012-05-24
Сообщения: 7
Репутация: +  1  -
Профиль   Отправить e-mail  

Рисуем неупорядоченные (x,y,z) посредством matplotlib.pyplot.contourf

немного переработанный код отсюда. уж не знаю, поможет или нет. в любом случае - удачи!

# -*- 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()
результат вот:

Отредактировано gisolog (Май 24, 2012 20:30:48)

Прикреплённый файлы:
attachment interpolate.jpg (124,6 KБ)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version