Need to make a 4D plot (3D + Colour)
34 views (last 30 days)
I need to make a 3D surface where colour will represent the fourth variable. I know "surf" is SIMILAR to what I need, but that's not quite it. Basically, I have the following variables:
t = [1:m]
y = [1:n]
f = [1:o]
These should be the three Cartesian corodinate axes.
I also have a variable S that is of dimensions m x n x o. I want this to be represented by colour.
So to summarize, I need a graph of the form (t,y,f,S), where the first three variables are vectors of unequal sizes and the final variable is a multidimensional array whose dimensions are determined by the first three.
Thanks in advance. How do I create a
Image Analyst on 31 Mar 2012
How about scatter3()? You can set the color and size of the data points that are plotted.
But how can you have unequal lengths of your 3 dimensions?
Jarrod Rivituso on 2 Apr 2012
I'm curious how slice doesn't fit your needs. I'm no data visualization expert so please take this as an honest "I'd like to know more" question :)
t = 1:100:7650;
scales = 1:10:100;
x = 1:4;
[T,SCALES,X] = meshgrid(t,scales,x);
tslice = ;
scalesslice = ;
xslice = 1:4;
SGRAM = T + SCALES + X;
surfHandles = slice(T,SCALES,X,SGRAM,tslice,scalesslice,xslice);
It can look so pretty...
I've always kinda been interested in 4D visualization, so please let us know whatever solution you find :)
Aaditya Kalsi on 1 Apr 2012
I think you may be able to use SURF to get the 3-D data, (use interpolated 't', 'y', 'f', by using TriScatteredInterp) in SURF and then use the fourth dimension (scale appropriately) to set the 'CData' (Color data property) of the resulting SURF object. This may need to be interpolated as well. You may that way plot the points as appropriate and set color using your dataset pretty much as you wanted. Small example:
nPoints = 20;
t = rand(nPoints, 1);
y = rand(nPoints, 1);
f = rand(nPoints, 1);
clr = rand(nPoints, 1);
% to make it compatible with 'CData', replicate columns to give G, B values
clr = repmat(clr, 1, 3);
scatHand = scatter3(t, y, f);
set(scatHand, 'CData', clr);
Kye Taylor on 3 Apr 2012
I take it that the four dimensions are the four different indices you are using to index your signals? If so, why would you treat these as coordinates in space. Typically, energy densities, such as that returned by wscaleogram, are visualized as images. In your case, you would want to look at four different images. What am I missing?
Check out Jarrod Rivituso's code above for an interesting way to display 4 such images.
Furthermore, I would double check how you're arriving at the dimensions 7605x32. (32 is likely scales, not 100, and 7605 is likely the length of your longest signal) No?