Plotting a 3D matrix with plot3

I have 3 Matrices .
P = rand (2,2,3) ; % row=2, col =2, slice (z axis) =3
Q = rand (1,2);
R = rand (1,2);
I want to plot the Matrix P with corresonponding to Q and R matrix in such a way that :
In 3 dimensional plot => X axis : Q Matrix ; Y axis : R Matrix ; Z axis =P Matrix.
Thank you for your kind help !

6 Commenti

Your X axis, Q, is 2 elements long. Your Y axis, R, is 2 elements long. Your Z axis, P, is 2 x 2 x 3.
We could guess that you might want each combination of element of Q with each element of R to define 2 x 2, but that leaves you with 3 values for each location, and you have not defined a meaning for that. For example is it 3 independent 2 x 2 surfaces?
@Walter Roberson Using the value from Q and R , P matrix was generated.
So, I do not think P matix is independednt (though I am confused).
"you might want each combination of element of Q with each element of R to define 2 x 2, but that leaves you with 3 values for each location" This is what I meant actually.
Thank you for your reply.
You have three values for each location. How would you like the plot for that to be represented?
For example do you want the first value to be converted into Red component, the second value to be converted into Green component, and the third value to be converted into Blue component of a face?
P = rand (2,2,3) ; % row=2, col =2, slice (z axis) =3
Q = rand (1,2);
R = rand (1,2);
[Qg, Rg] = ndgrid(Q, R);
dotsize = 100;
scatter(Qg(:), Rg(:), dotsize, reshape(P, [], 3), 'filled' )
With so few points to plot scatter3 might be the most straight-forward way to present this result. In addition to direct conversion to RGB-tripplets one could also consider using size for one of the components and use some combination of hue saturation and intensity/value for the other two. Exactly what is best for your data depends entirely on what P is.
Amit Chakraborty
Amit Chakraborty il 22 Set 2022
Modificato: Amit Chakraborty il 22 Set 2022
So, I am giving the original matrix size of all the three vectors.
LambdaL = linspace(0.000001,0.0001,20); % [Matrix in X axis]
LambdaT = linspace(0.000001,0.0001,20); % [Matrix in Y axis]
slices = [1 2 3 4 5]; % [Matrix in Z axis]
The Final Resultant matrix P : rand(20,20,5)
Consider that Using LambdaL and LamdaT the matrix P is generated.
My plot should be like that :
1) in X-axis: LambdaL value should be there
2) in Y-axis: LambdaT value should be there
3) in Z axis : The value inside matrix P should be plotted.
So in short, for Slice no. 1 there will be 20x20 value , Same for Slice no. 2- Slice no. 5
Sorry, if I made confusion. Thank you both for your reply.

Accedi per commentare.

Risposte (1)

LambdaL = linspace(0.000001,0.0001,20); % [Matrix in X axis]
LambdaT = linspace(0.000001,0.0001,20); % [Matrix in Y axis]
z = [1 2 3 4 5]; % [Matrix in Z axis]
[LL,LT,Z] = meshgrid(LambdaL,LambdaT,z) ;
P = rand(20,20,5) ;
% plot plane at x = .000001
slice(LL,LT,Z,P,LambdaL(1),[],[])
% plot plane at x = .000001 and y = 0.0001
slice(LL,LT,Z,P,LambdaL(1),LambdaT(end),[])
% plot all planes along x
slice(LL,LT,Z,P,LambdaL,[],[])

1 Commento

Sometimes I have had success with manipulating the "alpha" properties of the surfaces slice generates:
phSl = slice(LL,LT,Z,P,LambdaL,[],[]);
set(phSl,'FaceAlpha',0.7)
shading flat
If that type of visualization is what you're after matlab is a bit lacking, and the best software I've encountered is vis5d - which is an open software project that does this type of volume renderings, primarily for weather-data.

Accedi per commentare.

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by