Set y-axis as vertical when plotting in 3d

82 visualizaciones (últimos 30 días)
Jon Matthis
Jon Matthis el 18 de Oct. de 2015
Comentada: Alec Jacobson el 18 de Ag. de 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 comentario
Yi Wan
Yi Wan el 22 de Oct. de 2018
Hi John,
Did you find the final solution other than using camup?

Iniciar sesión para comentar.

Respuesta aceptada

Mike Garrity
Mike Garrity el 19 de Oct. de 2015
Perhaps you just want to set the CameraUpVector ?
xlabel('X')
ylabel('Y')
zlabel('Z')
box on
view(3)
camup([0 1 0])
  4 comentarios
Eva Herbst
Eva Herbst el 20 de Mayo de 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 el 18 de Ag. de 2022
Still no solution that maintains during interaction?

Iniciar sesión para comentar.

Más respuestas (4)

Pierce
Pierce el 17 de Oct. de 2019
Editada: Pierce el 17 de Oct. de 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 el 15 de Jun. de 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 el 14 de Dic. de 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 el 17 de Oct. de 2019
Editada: MCH el 17 de Oct. de 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 comentario
Matthew Galles
Matthew Galles el 14 de Oct. de 2020
Editada: Matthew Galles el 14 de Oct. de 2020
Just wasted a few hours trying to sort this out.

Iniciar sesión para comentar.

Categorías

Más información sobre 2-D and 3-D Plots en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by