Matlab:Make a contour plot with 3 vectors

30,337

Solution 1

You can also use griddata.

%Generate random data
x = rand(30,1);
y = rand(30,1);
z = rand(30,1);

%Create regular grid across data space
[X,Y] = meshgrid(linspace(min(x),max(x),n), linspace(min(y),max(y),n))

%create contour plot
contour(X,Y,griddata(x,y,z,X,Y))

%mark original data points
hold on;scatter(x,y,'o');hold off

Solution 2

For a contour plot you actually need either a matrix of z values, or a set (vector) of z-values evaluated on a grid. You cannot define contours using isolated Z values at (X,Y) points on the grid (i.e. what you claim you have).

You need to have the generating process (or function) provide values for a grid of (x,y) points.

If not, then you can create a surface from nonuniform data as @nate correctly pointed out, and then draw the contours on that surface.

Consider the following (random) example:

N = 64; % point set
x = -2 + 4*rand(N,1); % random x vector in[-2,2]
y = -2 + 4*rand(N,1); % random y vector in[-2,2]

% analytic function, or z-vector
z = x.*exp(-x.^2-y.^2);

% construct the interpolant function
F = TriScatteredInterp(x,y,z);

t = -2:.25:2; % sample uniformly the surface for matrices (qx, qy, qz)
[qx, qy] = meshgrid(t, t); 
qz = F(qx, qy);

contour(qx, qy, qz); hold on; 
plot(x,y,'bo'); hold off

The circles correspond to the original vector points with values (x,y,z) per point, the contours on the contours of the interpolant surface. enter image description here enter image description here

Share:
30,337
Moe
Author by

Moe

Updated on July 09, 2022

Comments

  • Moe
    Moe almost 2 years

    I have 3 vectors of data, X (position), Y (position) both of which are not regularly spaced, and Z(value of interest at each location). I tried contourf, which doesn't work because it needs a matrix for Z input.