Plot 4d surface from x, y, z, c data

269 views (last 30 days)
Hello,
I was wondering how to plot a 4d surface. I have x, y and z data (unevenly spaced), and c data (c is a function of x, y, z). I would like to plot c as a surface, with particular value of c being defined by a colour.
My x, y, z and c data are column vectors, but I don't think this is suitable for the surf(x, y, z, c) function.
Any help would be greatly appreciated.
Carol

Accepted Answer

Doug Hull
Doug Hull on 1 Nov 2013
I am not sure, but I think you might want sliceomatic

More Answers (2)

Simon Fluegge
Simon Fluegge on 12 Feb 2017
Edited: Walter Roberson on 12 Feb 2017
I have the following data:
x=rand(1,5)
y=rand(1,10)
z=rand(1,13)
score=f(x,y,z)
I would like to plot a surface. The color of the surface is related to the score value. To each data pair of x and y I only want to plot the related z value which has the best score value.
  2 Comments
Cosmin Constantin Popescu
Cosmin Constantin Popescu on 22 Jan 2019
Thank you for the idea with the isosurface. It's exactly what I needed. For anyone interested, isosurface can be used with non-evenly spaced x,y,z coordinates.

Sign in to comment.


Ryan
Ryan on 5 Aug 2014
If you want to plot a surface, you should be able to rearrange your z and c data into matrices so that they form a matrix, which would then make it suitable for the surf(x,y,z,c) function.
Example:
x = 1:10;
y = 11:20;
z = x'*y;
c = randi(10,10);
surf(x,y,z,c)
Column vectors would work well for using scatter3(x,y,z,s,c) (just use scalar s, e.g. 10) and this might be a good way to quickly visualize the data. The problem with having z as a column vector for a surface is Matlab doesn't know how they're supposed to line up, and which vertices to connect to form a continuous surface. You give it this information by passing z in as a rectangular matrix, and x and y as vectors with elements that define the lines on the surface in their respective domains.
Let us know whether your data can be shaped to fit this.
  4 Comments
Walter Roberson
Walter Roberson on 25 Apr 2016
If the inputs x and y are both column vectors then use
z = x * y.';

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!