# Plotting contours of Z on an x-y axis where Z is not a function of x or y

62 views (last 30 days)
JS on 4 Jan 2019
Commented: Walter Roberson on 24 Sep 2020 at 21:39
Hello,
I have collected data of temperature measurements at certain coordinates in a room. I want to plot these temperature measurements on a contour map, where the X and Y axis are the perimeter (and dimensions) of the room, and the contours of Z are the temperature measurements I have taken. The total size of the room is x=7m, and y=10.6m. I cannot find a way of plotting a contour map where Z is not a function of x or y. The measurements of temperature (Z) at certain x- and y-coordinates in the room are shown below:
Coordinates Temperature
X Y Z
0.2 9.4 17.0
2 9.3 17.85
7 5 17.65
7 5 17.5
Is there a way of plotting this on a 2D contour map, where the values of Z are shown on the contours?

Aquatris on 4 Jan 2019
Edited: Aquatris on 7 Jan 2019
You do not have a lot of data so the countour map will not look great. However what you need to do is;
% create data
x = [0.2 2 7 7];
y = [9.4 9.3 5 5];
z = [17 17.85 17.65 17.5];
% create xy axis grid
[X,Y] = meshgrid(x,y);
% create corresponding Z values, assume z = 0 for locations with no z data
Z = zeros(length(x),length(y)) ;
for i = 1:length(x)
for j = 1:length(y)
if i==j % z data exist for only for x(n) y(n) location, n = 1,2,3...
Z(i,j) = z(i);
end
end
end
contourf(X,Y,Z)

JS on 5 Jan 2019
Thank you for this! This produces the kind of contour map that I want.
Saurabh Das on 2 Jul 2020
Thanks very much. This was quite helpful!

Walter Roberson on 2 Jul 2020
You should probably be using scatteredInterpolant() or griddedInterpolant().

Saurabh Das on 2 Jul 2020
Hi Walter,
Though the method shown by Aquatris helped me to get a shade of the graph that I am looking for, all the other elements about the diagonal are zero in the Z matrix of contour(X,Y,Z) as per the abovementioned fix.
My script is such that I cannot express Z as a function of X and Y. So, the error message shown below pops up
"Z must be atleast of dimensions 2x2."
Is there any other way to obtain a contour plot if my X, Y and Z matrices are of dimensions 1x850 after all the calculations are completed?
I have been using meshgrid and the method proposed by Aquatris but am not at all satisfied with the results. But, the good news is that I am atleast getting a plot.
Any help would be greatly appreciated!
Walter Roberson on 2 Jul 2020
x = [0.2 2 7 7];
y = [9.4 9.3 5 5];
z = [17 17.85 17.65 17.5];
N = 100;
xvec = linspace(min(x), max(x), N);
yvec = linspace(min(y), max(y), N);
F = scatteredInterpolant(x(:), y(:), z(:));
[X, Y] = ndgrid(xvec, yvec);
Z = F(X, Y);
surf(X, Y, Z, 'edgecolor', 'none');
Note that your last two X, Y coordinates are the same but different Z: the data will be averaged.
You effectively only have three different points with this data, so the output is a plane.

Vidya shree V on 24 Sep 2020 at 14:20
I have R Z T value how to plot contour graph in matlab

#### 1 Comment

Walter Roberson on 24 Sep 2020 at 21:39
How do the values relate to each other? Are they vectors or grids? Are two of them "marginal vectors" and the other one effectively a grid?