123 views (last 30 days)

Show older comments

What code should I use to plot a 3D contour plot? I saw there are some contour3 functions, but I don't know how to create the 2*2 matrix for my data. I have data include (x,y,z) positioning data and value at each position. I attached part of my data looks like, not all y,z values are zero.

I also attached a plot that shows closely to what I want, but I also want scales shown on the figure.

Denis Perotto
on 15 Mar 2019

Sriram Narayanan
on 3 Jun 2015

Since you have values at points (x,y,z) in space, you could use the 3-D interpolation function "interp3" to interpolate between the points from the sample data and then use the "surf" function to generate the 3-D plot and the colorbar command to add the scale.

The following page talks about how to use this function.

Example code is:

generatedvalues = @(X,Y,Z)(X.^2 + Y.^3 + Z.^4);

[X,Y,Z] = meshgrid((-5:.25:5));

V = generatedvalues(X,Y,Z);

x = X(:,3,:);

y = Y(:,3,:);

z = V(:,3,:);

v = V(:,3,:);

z = Z(:,3,:);

x = squeeze(x);

y = squeeze(y);

z = squeeze(z);

v = squeeze(v);

surf(x,y,z);

colorbar

Luca Greggio
on 1 Apr 2020

maybe i have got the answer

close all

clear all

file = fopen('valori.dat');

imax = fscanf(file, '%d \n', 1);

x = fscanf(file, '%f \n', imax);

y = fscanf(file, '%f \n', imax);

z = fscanf(file, '%f \n', imax);

T = fscanf(file, '%f \n', imax^3);

T = reshape(T,[imax, imax, imax]);

[X,Y,Z]=meshgrid(x,y,z);

xs = squeeze(X(:,7,:));

ys = squeeze(Y(:,7,:));

zs = squeeze(Z(:,7,:));

surf(xs,ys,zs,squeeze(T(:,:,7)));

colorbar

this get data from the file 'valori.txt' and when i apply the procedure in the answer, i simply add the 4th value in surf which is C, standing for color, this give the opportunity to give a color to the grid from your V value, in my case is T, i am plotting a 3D Heat equation soulution, i hope this can help

John A
on 22 Nov 2017

I have 5 surfaces, each is a 5 by 10 matrix. Each entry represents force value and is 1inch from neighboring entries on the surface. I was hoping to stack these surfaces to create a 3D block and contour (or color code) the block based on the magnitudes of these value. The expected outcome will be a block similar to Jia's block model shown above. Can someone please direct me on how to do this in matlab? I am a beginner in matlab but can find my way out if pointed in the right direction.

Thank you

Kabilan K
on 9 Nov 2019

Anyone have got the required answers for the question of John A or Jia

Denis Perotto
on 10 Nov 2019

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

Start Hunting!