Contour plots in terms of 3 variables

Hi all - I hope someone can help me.
I have three data sets:
  • wind speed
  • wind direction
  • error.
What I'd like to do is to create a contour plot that shows values of error in terms of the wind speed and direction - in so far that the diagram will illustrate where the greater values of error are with respect to both wind speeds and direction. Can any one help??

1 Comment

perhaps you will want to investigate meshgrid()

Sign in to comment.

Answers (3)

the cyclist
the cyclist on 10 Feb 2012
Use the contour() function. Type "doc contour" into MATLAB for details.

5 Comments

Thanks for that cyclist - but I have been trying to get that function to work.
I have three data sets in a text file I'd like to plot the third set (the error set) against speed and direction. When I try to employ contour() it states that Z must be a matrix at least 2x2 whereas.
What I've been playing around is as follows:
load Error_No_Filter.txt
X=Error_No_Filter(:,1) % Wind Speed
X=Error_No_Filter(:,2) % Wind Direction
Z=Error_No_Filter(:,3) % error
[C,h] = contour(X,Y,Z);
set(h,'ShowText','on','TextStep',get(h,'LevelStep')*2)
colormap cool
There are different syntaxes for calling contour(), but in general it is expecting the Z input to be a matrix, with one value for each possible (x,y) combination. Here is a very simple prototype for the syntax:
x = 1:5;
y = (1:10)';
z = bsxfun(@times,y,x)
contour(x,y,z)
If your wind speeds and directions are on a regular grid, then you'll just need to reshape your Z values accordingly. If not, you might need to use TriScatteredInterp() to create the regular grid that contour() is expecting.
Thanks again cyclist - I'll give that a go....
Hi cyclist - that appears to work - although to be honest, it doesn't produce the contoured illustration I desire. The code::
load Error_No_Filter.txt
X=Error_No_Filter(:,1)
Y=Error_No_Filter(:,2)
Z=Error_No_Filter(:,3)
F.Method = 'nearest';
F = TriScatteredInterp(X, Y, Z);
x_axis = 0:1:15;
y_axis = 0:10:360;
[qx,qy] = meshgrid(x_axis,y_axis);
qz = F(qx,qy);
mesh(qx,qy,qz); hold on; contour3(X,Y,Z);
xlabel('Wind Speed [m/s]', 'fontweight','b'), ylabel('Wind Direction [deg]','fontweight','b')
zlabel('error', 'fontweight','b')
title('Interpolated error in terms of wind speed & direction', 'fontweight','b');
From the above, do you have any suggestions that can facilitate turning the above into a contour illlustration that also illustrates the values of the associated cotours?
Thanks,
KEith
I think what you want is the colorbar command. Just run that command after your code.

Sign in to comment.

Image Analyst
Image Analyst on 12 Feb 2012
Why not use TriScatteredInterp() to turn your set of (x,y,z) triplets into an image, and display it as an image? That would probably be an insightful visualization and allow you to see patterns. Or you can do a surface plot. There's a nice demo for that in the help for TriScatteredInterp().
It sounds like you might be interested in a streamtube or streamribbon plot.
doc streamribbon
doc streamtube

Categories

Asked:

on 10 Feb 2012

Edited:

on 10 Oct 2013

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!