2013-01-02 13 views
7

Próbuję umieścić niektóre dane w działce imshow(). Mój problem polega na tym, że dane nie pochodzą z tablicy MxN, lecz z tablicy 3xN (współrzędna xi y). Punkty NIE są ułożone jako regularna siatka, ale mieszczą się w [xmin, xmax, ymin i ymax] = [- pi/2, pi/2,0,3.5].matplotlib imshow() z nieregularnymi punktami danych o odstępach

In [117]: shape(data) 
Out[117]: (3L, 102906L) 

Jak uzyskać ładny obraz z tych danych? Dziękuję bardzo za pomoc.

btw dane przedstawiają wartości temperatury na powierzchni pręta w funkcji pozycji osiowej i azymutalnej, pomyśl o siatce cfd.

+1

hm ostatecznie interp2d zamierza wykonać zadanie ... Pozwala zobaczyć – user1805743

+1

Jeśli rozwiązać problemu, można proszę odpowiedzieć na swoje pytanie i przyjmuję odpowiedź? – tacaswell

Odpowiedz

12

Polecam użycie metody griddata do interpolacji. Próbka byłaby:

import numpy as np 
from matplotlib.mlab import griddata 
import matplotlib.pyplot as plt 

xs0 = np.random.random((1000)) * np.pi - np.pi/2 
ys0 = np.random.random((1000)) * 3.5 
zs0 = np.random.random((1000)) 

N = 30j 
extent = (-np.pi/2,np.pi/2,0,3.5) 

xs,ys = np.mgrid[extent[0]:extent[1]:N, extent[2]:extent[3]:N] 

resampled = griddata(xs0, ys0, zs0, xs, ys) 

plt.imshow(resampled.T, extent=extent) 
plt.plot(xs0, ys0, "r.") 
plt.plot(xs, ys, "b.") 
plt.title("imshow for irregularly spaced data using griddata") 
plt.show() 

Domyślam się, że przejście z 3 * X-array do trzech X-tablic jest oczywiste.

Wynikiem jest:

Sample

Czerwone punkty pokazują „oryginalne” pozycje danych, niebieskie punkty za teraz regularnie rozmieszczonych danych.

griddata zwraca zamaskowaną tablicę. Wszystkie punkty, dla których nie można ocenić interpolacji, są maskowane, a następnie drukowane jako białe obszary.

HTH, Thorsten

+0

Właśnie miałem opublikować ten link, ponieważ pomógł mi, ale byłeś szybszy :) http://www.scipy.org/Cookbook/Matplotlib/Gridding_irregularly_spaced_data – user1805743