Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

matplotlib imshow() with irregular spaced data points

I am trying to put some data into an imshow() plot. My problem is that the data does not come as a MxN array but as a 3xN array (x- and y coordinate and value). The points are NOT arranged as a regular grid but lie within [xmin,xmax,ymin and ymax]=[-pi/2,pi/2,0,3.5].

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

How can I get a nice image plot from that data? Thank you very much for any help.

btw the data represents temperature values on the surface of a rod as a function of axial and azimuthal position, think of a cfd-mesh.

like image 398
user1805743 Avatar asked Jan 02 '13 10:01

user1805743


1 Answers

I recommend using the griddata-method for interpolation. A sample would be:

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()

I guess transition from your 3*X-array to three X-arrays is obvious.

The result is:

Sample

Red points show the "original" positions of the data, blue points for the now regularly spaced data.

griddata returns a masked array. All points for which the interpolation cannot be evaluated are masked and then plotted as white areas.

HTH, Thorsten

like image 160
Thorsten Kranz Avatar answered Oct 07 '22 13:10

Thorsten Kranz