Set y-axis as vertical when plotting in 3d

85 Ansichten (letzte 30 Tage)
Jon Matthis
Jon Matthis am 18 Okt. 2015
Kommentiert: Alec Jacobson am 18 Aug. 2022
By default, the 'plot3' function assumes that Z-data denotes vertical data. For example, if I were plotting motion capture data of, say, a subject's right foot - plot3(rFootX, rFootY, rFootZ) - it would plot the 'rFootZ' data as the vertical position of the foot.
Is there a way to set 'plot3' so that it uses Y as the default vertical axis? That is, if my motion capture system outputs the vertical position of a subjects' right foot as 'rFootY,' can I set things up so that plotting 'plot3(rFootX, rFootY, rFootZ)' displays the data correctly (with Y pointing up)?
Up until now, I have been using a little helper function to get things to plot with Y pointing up:
function plot3y(x,y, z,varargin) plot3(x,-z,y,varargin{:})
But this gets VERY confusing when trying to manipulate the resulting plots using the default Matlab functions like "axis" and "surface," as these assume that the Z-axis is the vertical.
I have also played around with using camroll (specifically, 'camroll(-90)'), but this tends to get screwy when I start adjusting the the viewpoint (the camera still tries to rotate around a Z-vertical axis).
tl;dr - I'm looking for some setting that I adjust that will set the Y-axis as the default vertical when using 'plot3'
  1 Kommentar
Yi Wan
Yi Wan am 22 Okt. 2018
Hi John,
Did you find the final solution other than using camup?

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Mike Garrity
Mike Garrity am 19 Okt. 2015
Perhaps you just want to set the CameraUpVector ?
xlabel('X')
ylabel('Y')
zlabel('Z')
box on
view(3)
camup([0 1 0])
  4 Kommentare
Eva Herbst
Eva Herbst am 20 Mai 2021
I found that setting the camera view in the code before the camup worked.
Still doesn't work if you want to interact with the figure but if you just need one angle for an image then this works well.
Another workaround is recoloring the axes and then rotating all of your data accordingly, but this results in messy code. Solves the interaction problem though.
Alec Jacobson
Alec Jacobson am 18 Aug. 2022
Still no solution that maintains during interaction?

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (4)

Pierce
Pierce am 17 Okt. 2019
Bearbeitet: Pierce am 17 Okt. 2019
Unfortunately, I couldn't find a soluition based on axis manipulation so I ended up modifying the data and relabelling the axis to achieve the orientation I wanted.
iReorder = [-1 3 2]; % Invert X axis, and swap Y + Z axis. Unity to Matlab transformation
iInvert = find(iReorder < 0); % Column indicies to invert
iReorder = abs(iReorder); % Column indicies to reorder
Pxyz; % Orignal x y z data
Pxyz = Pxyz(:,iReorder); % Reorder x y z data to x z y
Pxyz(:,iInvert) = -Pxyz(:,iInvert); % Invert data to -x z y
plot3(Pxyz(:,1),Pxyz(:,2),Pxyz(:,3),'.b')
xlabel('x');
ylabel('z');
zlabel('y');
Optionaly, the axis can be inverted instead of inverting the data.
h.axes = axes;
set(h.axes,'XDir','reverse')

Blake Andersen
Blake Andersen am 15 Jun. 2018
This answer only works if you're happy switching from a right handed coordinate system to left. I want a consistent way to plot data in the system that is standard for my industry: +X -> right +Y -> up +Z -> forward Simply changing the labels and transforming the data results in the x axis of the plot displaying the opposite of actual.
There are a string of hacks that I have been doing to cover this up, but I just want to change the orientation of the plot.

Pierce
Pierce am 14 Dez. 2018
I'm trying to do the same but haven't quiet found a solution outside of reordering my input data.
setting the camera to [0 1 0] is a starting point, but as you say it doesn't survive rotation operations.
setting the direction of X axis to reverse can help
% Unity coordinate space
set(h.axes,'CameraUpVector',[0 1 0]) % Set Y axis as vertical
set(h.axes,'XDir','reverse') % Reverse the x axis

MCH
MCH am 17 Okt. 2019
Bearbeitet: MCH am 17 Okt. 2019
Has anyone found a solution? This is quite frustrating and I am having to apply hacks when switching from 3D to 2D input files. I just want to change the orientation of the plot. How can this be so hard?
  1 Kommentar
Matthew Galles
Matthew Galles am 14 Okt. 2020
Bearbeitet: Matthew Galles am 14 Okt. 2020
Just wasted a few hours trying to sort this out.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu 2-D and 3-D Plots finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by