My data is x,y,z,w. How can I create a 3D contour plot of it?

I have a tab delimited text file (see attached) that has x,y,z data from a design of experiments sweep and the output variable is w.
I tried using this:
fidi=fopen('DOE sweep1A.txt', 'rt'); % version of text file without headers
D=textscan(fidi, %f%f%f%f');
X=D{1}; % rpm
Y=D{2}; % m_dot
Z=D(3); % P
W=D{4); % Power
N=100;
Xi=linspace(min(X),max(X),N);
Yi=linspace(min(Y),max(Y),N);
Zi=linspace(min(Z),max(Z),N);
[Gx,Gy,Gz]=meshgrid(Xi,Yi,Zi);
Wi=griddata(X, Y, Z, W, Gx, Gy, Gz, 'natural');
contour(Gx, Gy, Gz, Wi, 'Linestyle', '-', 'Linecolor', [0 0 0], 'ShowText', 'on', 'LevelStep', 1)
grid on
colormap(jet)
colorbar;
And I know that it doesn't work because it can only have 2 dimensions and also that there are repeating numbers for X, Y, and Z because it is a design of experiments sweep.
But I would still want to plot this preferably in a 3D contour plot.
Is there a way to do so?
Thanks.

2 Comments

Yours is a volumetric data, not a surface data. What you expect?
I didn't expect anything from it.
I was just recycling an old solution that I got from here and tried to use it for a new problem.

Sign in to comment.

Answers (2)

You might want to experiment with isosurface(). You might want to ask it to draw at several different surface levels

3 Comments

Do/will I always need to plot is via "slices" (e.g. surface levels) or is there another function that has already been built into MATLAB that can do this kind of a plot?
Thanks.
We can't say, as you have not defined your desired output in any useful way. What would you expect a "3d contour plot" to look like? Do you have an example plot?

Sign in to comment.

It is a good question. He wants to do output of surf.m with three coords but instead of colored contours wants lines. Not a hard concept.
surf(X,Y,Z,C) but instead of C you have contour intervals.

4 Comments

griddata() produces a 3D volume. What would the lines join?
If you want to joint the places that have the same value, then you would be creating a surface not a line.
Yes, that's correct. I want surface contours on a 3D surface. I used contourslice after griddata, but that didn't work so well as it didn't plot contours on much of my surface. I figured out a hack, tho, that worked great. Saved the contour matrix for a 2D contours (depth-time contours), then created new contour matrix indices for latitude and longitude that have the same time basis (using interp). Then used plot3 to plot the new contour lines (gray) on top of the surf plot of the other quantity.
Screen Shot 2019-08-07 at 10.36.37 PM.png
Hi John,
I have a similar problem recently. The figure you showed above is right what I need. Could you please share the code or tell more detail about how to draw it? Much appreciated.
I have just solved this problem. Thanks!

Sign in to comment.

Categories

Asked:

on 28 Jun 2017

Commented:

on 9 Dec 2019

Community Treasure Hunt

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

Start Hunting!