managing surface plot axis

I wonder if it is possible to plot a surface in matlab while changing the x, y and z axis.
I don't want to have my z value upwards. I want to have it in x direction instead.
The problem here is the colorbar which is based on the z value. Even if I change the order of my data points, matlab always consider the z value for the colorbar.
Thank you very much in advance.

 Accepted Answer

Have you tried using your X data as the surface color input C? Adapting this doc example.
[X,Y] = meshgrid(1:0.5:10,1:20);
Z = sin(X) + cos(Y);
surf(X,Y,Z,X)
xlabel("X")
ylabel("Y")
zlabel("Z")
colorbar

9 Comments

Thank you very much.
How can I do the same with contour3 function to define y axis as the one to plot my contours over the surface?
I mean how can I change the Y and Z axis in the above example you provided with contour3.
The simplest way is to plot your data like this
contour3(X,Z,Y)
Then the contour lines are ploted based on the Y values and not the Z that I want.
I want to somehow rotate my coordinate system 90 degrees downwards without using view function.
Why you can't use the view function?
I can use it technically but I could not find the best viewangle.
The best one is the one that gives me the rotation of my coordinate 90 degrees downwars.
Cris LaPierre
Cris LaPierre on 11 Dec 2020
Edited: Cris LaPierre on 11 Dec 2020
I don't see any setting that lets you define which axis the contours show up on. I'll never say it isn't possible, but I don't currently know how to do it. I do think there is a way to do what you want using the normal axis arrangement and rotating your axes.
You can rotate manually and, once you get the view you want, use those parameters in your view command.
Thank you very much anyway. I hope I find a solution. This is very annoying as the problem will be easily solved just by changing the axis.
A coworker pointed out to me that perhaps adjusting the camera properties might create the view you want.
[X,Y] = meshgrid(-5:0.25:5);
Z = X.^2 + Y.^2;
contour3(X,Y,Z,50);
ax = gca;
camup([1 0 0]); % or set the CameraUpVector property of axes
ax.CameraPosition = [30 -70 -140];
ax.CameraViewAngle = 10;

Sign in to comment.

More Answers (1)

Math Passion
Math Passion on 12 Jan 2021
That works perfectly!
Thanks alot!

Community Treasure Hunt

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

Start Hunting!